Python uv متقدم: إصدارات Python وواجهة pip وتثبيت الأدوات

2 min read

عندما تنتقل المتطلبات من "طالما يعمل" إلى "اختبار متعدد الإصدارات، وpipelines متوافقة مع الإصدارات القديمة، وإدارة أدوات عامة"، uv يستطيع التعامل معها. هذه المقالة تنقلك من الجري المنفرد في الزنازين إلى المداهمة كفريق.

إدارة إصدارات Python

uv لديه تنزيل وإدارة Python مدمجان — لا حاجة لتثبيت pyenv منفصلاً.

# تثبيت إصدارات متعددة
uv python install 3.10 3.11 3.12
 
# تثبيت مشروع على إصدار محدد (ينشئ .python-version)
uv python pin 3.11
 
# إنشاء venv بإصدار محدد
uv venv --python 3.12
 
# تشغيل بإصدار محدد
uv run --python 3.10 pytest

في المرة الأولى لاستخدام إصدار، يُنزَّل تلقائياً — الاستخدامات التالية تنطلق مباشرةً من الذاكرة المؤقتة.

واجهة متوافقة مع pip

CI وDocker والسكريبتات الموجودة لا تزال تستخدم pip؟ uv يوفر بديلاً مُسقطاً:

# مكافئ لـ pip install -r requirements.txt
uv pip install -r requirements.txt
 
# جمع المتطلبات (عبر الأنظمة، قابل للتكرار)
uv pip compile requirements.in --universal -o requirements.txt
 
# مزامنة البيئة (بدقة من lockfile)
uv pip sync requirements.txt
 
# إنشاء venv
uv venv

بدّل إلى uv pip والمعلمات متطابقة تقريباً، لكن السرعة تقفز بدرجة قياسية — مثل الترقية من دراجة هوائية إلى دراجة نارية: نفس الطريق، تجربة مختلفة تماماً. تريد ترقية مشروعك القديم بدون تغييرات كبيرة؟ ابدأ بـ uv pip، إطلاق سهل.

تثبيت الأدوات العامة (uv tool)

لا تريد تشغيل uvx في كل مرة للأدوات التي تستخدمها كثيراً؟ ثبّتها عاملياً:

uv tool install ruff
uv tool install httpie
 
# استدعها مباشرةً بعد ذلك
ruff check .
http https://httpbin.org/get

ترقية أدوات فردية أو جميعها دفعة واحدة:

uv tool upgrade ruff
uv tool upgrade --all

uv tool install ينشئ بيئات معزولة لن تتعارض مع تبعيات المشروع. للإصدارات المثبّتة للمشروع، استخدم uv add --dev.

Lockfile السكريبت والـ Shebang

تريد سكريبتاً واحداً قابلاً للتكرار أيضاً؟ يمكنك قفل تبعياته:

uv lock --script example.py

هذا ينشئ example.py.lock. عندما تشغّل uv run example.py، يستخدم ذلك lockfile.

أو اجعله قابلاً للتنفيذ:

#!/usr/bin/env -S uv run --script
# /// script
# dependencies = ["httpx"]
# ///
 
import httpx
print(httpx.get("https://example.com"))
chmod +x fetch
./fetch

الخطوات التالية

مع إتقان القدرات المتقدمة، استخدم مجموعة إرشادات للحد من المخاطر:
👉 أفضل الممارسات