۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

نحوه استفاده از uv: یک نصب کننده بسته Python بسیار سریع

ابزار مدیریت پروژه همه در یک پایتون که در Rust نوشته شده است با هدف جایگزینی pip، venv و موارد دیگر است. در اینجا یک نگاه اول است.

ابزار مدیریت پروژه همه در یک پایتون که در Rust نوشته شده است با هدف جایگزینی pip، venv و موارد دیگر است. در اینجا یک نگاه اول است.

از میان همه انتقاداتی که به Python وارد می‌شود، یکی از معتبرترین و متأسفانه ماندگارترین آنها وضعیت آشفته اکوسیستم بسته‌بندی آن است. همانطور که XKCD به شکلی به یاد ماندنی توسط XKCD نشان داده است، نسبت به گذشته کمتر آشفته است، اما هنوز به سختی ایده آل است. اشخاص ثالثی مانند poetry و pipenv با ارائه ابزارهایی که بر اساس استانداردهای موجود Python ساخته شده‌اند اما بر اساس گردش‌های کاری ظریف‌تر طراحی شده‌اند، شکاف‌ها را پر کرده‌اند.

اکنون uv را داریم، جدیدترین افزونه به اکوسیستم نصب کننده بسته پایتون. ایجاد شده توسط Astral، همان تیمی که از ruff ابزار پر کردن پایتون نگهداری می کند، uv قصد دارد جایگزینی همه در یک برای pip باشد، < code>venv و بسیاری دیگر از ابزارهای مدیریت پروژه خط فرمان برای پایتون. برخلاف سایر مدیران پروژه پایتون، uv عمدتاً در Rust نوشته شده است، که در نظر گرفته شده است تا آن را سریعتر از سایر ابزارهای کلاس خود، به طور بالقوه بر اساس ترتیبات بزرگی، کند.

راه اندازی uv و کار با venvs

چند راه مختلف برای نصب uv وجود دارد< /a>. یک راه معمول و آسان برای شروع، استفاده از pip برای نصب uv در یک نصب پایتون است. اگر نصب پایتون در سیستم PATH باشد، می‌توانید uv را فقط با تایپ uv در خط فرمان فراخوانی کنید.

هنگامی که uv را نصب کردید، می توانید با دستور uv venv یک محیط مجازی در یک پوشه مشخص ایجاد کنید. اگر خودتان نام دایرکتوری ارائه نکنید، venv در دایرکتوری .venv ایجاد می شود.

venv uv ایجاد شده دقیقاً مانند یک محیط مجازی معمولی با چند تغییر جزئی رفتار خواهد کرد. شما venv را به همان روش معمولی فعال می‌کنید—مثلاً source .venv/bin/activate در Linux/macOS یا .venv\Scripts\activate در Microsoft ویندوز.

با این حال، venv uv ایجاد می‌کند pip یا setuptools را نمی‌دارد به صورت پیش‌فرض نصب شده باشد. برای یک پروژه مدیریت شده با uv، از شما انتظار می رود که در صورت امکان از ابزارهای مدیریت uv استفاده کنید.

استفاده از pip با uv

uv نسخه خود را از pip حفظ می‌کند که شما به صراحت از طریق uv به آن دسترسی دارید. دستورات یکسان هستند:


uv pip install flask

uv از اکثر رفتارهای رایج pip پشتیبانی می‌کند، مانند نصب‌های قابل ویرایش، انتخاب اجزای اختیاری (مثلاً uv pip install "flask[dotenv]"< /code>)، یا از منبع git نصب کنید.

چند رفتار هنوز پشتیبانی نمی‌شود ، اما اینها نباید در کار روزمره شما اختلال ایجاد کند. با این حال، برخی چیزها به طور قابل توجهی متفاوت هستند.

استفاده از "uv pip" با git

اگر می‌خواهید نیازی را از یک مخزن git یا GitHub نصب کنید، توجه داشته باشید که باید از نحو کمی متفاوت با استفاده از pip استفاده کنید. شما باید نام بسته را برای نصب، @ و سپس منبع را مشخص کنید:


uv pip install "<package_name> @ https://github.com/<user>/<repo>"

به نقل‌قول‌هایی که برای فرار درست از @ لازم است توجه کنید. همچنین باید نحو خاص را به از احراز هویت با پیوندهای git استفاده کنید.

استفاده از "uv pip freeze" به جای "pip list"

برای فهرست کردن موارد نصب شده در یک venv معین، از uv pip freeze به جای uv pip list استفاده کنید. نتایج را می‌توان به یک فایل هدایت کرد، همانطور که معمولاً با تجمیع پیپ انجام می‌شود.

قفل کردن، کامپایل کردن و همگام سازی وابستگی ها

uv چندین ویژگی را برای قفل کردن و همگام‌سازی وابستگی‌ها با فهرست نیازمندی‌های پروژه ارائه می‌دهد.

هنگامی که از uv pip freeze استفاده می‌کنید، فهرست به دست آمده دارای الزامات نسخه صریح برای هر بسته است، به این معنی که در نسخه‌های خاص مورد نظر "قفل" می‌شود.

اگر می خواهید یک فایل pyproject.toml یا requirements.in موجود را بردارید و یک مجموعه وابستگی قفل شده به عنوان requirement.txt ایجاد کنید، استفاده کنید:


uv pip compile pyproject.toml -o requirements.txt
# or ...
uv pip compile requirements.in -o requirements.txt

استفاده از pip-compile و pip-sync با uv

هدف بلند مدت

uv ارائه جایگزین هایی برای چندین ابزار پایتون است. دو تا از ابزارهایی که uv در حال حاضر می توانند جایگزین شوند، اگرچه به روشی اولیه، pip-compile و pip-sync هستند.

pip-sync محیط مجازی پروژه را می گیرد و مجموعه بسته های آن را با لیست ارائه شده از بسته ها، معمولاً یک فایل requirements.txt همگام می کند. با uv، برای همگام‌سازی وابستگی‌های نصب‌شده پروژه با فهرستی از وابستگی‌های قفل‌شده، مانند ابزار pip-sync، از:

استفاده کنید.


uv pip sync requirements.txt

ابزار pip-compile یک فایل requirements.in ایجاد می کند که وابستگی های "قفل شده" را فهرست می کند، از یک pyproject.toml موجود یا requirements.txt پرونده:


uv pip compile .\pyproject.toml -o requirements.in

این یک لیست قفل‌شده از وابستگی‌های فهرست شده در pyproject.toml را در requirements.in ذخیره می‌کند، که سپس می‌تواند برای بازیابی نیازمندی‌هایی که با یک پیکربندی خاص مطابقت دارند استفاده شود.

محدودیت های uv

پروژه uv هنوز در مراحل اولیه خود است، بنابراین هنوز طیف کاملی از عملکردهای مورد نظر را پشتیبانی نمی کند. بسیاری از ویژگی ها ناقص هستند (اگرچه به این صورت مستند شده اند)، و بسیاری دیگر قرار است بعدا اضافه شوند.

موضوع دیگری برای uv در Rust نوشته شده است — که البته یکی از نقاط قوت آن نیز می باشد. نوشته شدن در Rust باعث می شود uv سریع و کارآمد باشد، اما همچنین می تواند کمک به آن را برای کاربران پایتون دشوار کند. یک توسعه‌دهنده پایتون که می‌خواهد به ابزارهای پایتون کمک کند، بیشتر باید فرآیند خاصی را برای مشارکت در پروژه یاد بگیرد. اما یک توسعه‌دهنده پایتون که می‌خواهد به uv یا هر ابزار پایتون دیگری که در Rust نوشته شده است کمک کند، باید Rust را نیز یاد بگیرد.

از آنجایی که نوشتن ابزارهای پایتون در Rust هنوز یک پدیده نسبتاً جدید است، مشخص نیست چقدر تأثیر آن بر نحوه مشارکت توسعه دهندگان پایتون در چنین پروژه هایی خواهد بود. اما واضح است که Rust در حال تبدیل شدن به یک انتخاب معتبر برای نوشتن ابزارهای Python است، اگر فقط به خاطر اولویت دادن به عملکرد.