الأنماط الشائعة لـ Python uv: التبعيات وuvx وتنفيذ السكريبت

2 min read

تركّز هذه المقالة على أكثر خمس مهام في التطوير اليومي شيوعاً، مع قوالب عملية يمكن استخدامها فوراً. أتقن هذه الأنماط وستتمكن من التعامل مع 80% من السيناريوهات — الـ 20% المتبقية للقسم المتقدم.

النمط 1: إضافة التبعيات وإزالتها

# إضافة تبعية
uv add requests
uv add "requests>=2.31,<3"   # مع قيود الإصدار
 
# تبعيات التطوير (اختبارات، lint، فحص الأنواع)
uv add --dev pytest ruff mypy
 
# إزالة
uv remove requests

uv add يحدّث pyproject.toml وuv.lock و.venv في آنٍ واحد — أمر واحد يفعل كل شيء.

النمط 2: uv run لتنفيذ أوامر المشروع

للسكريبتات وCLIs والاختبارات داخل المشروع، استخدم دائماً uv run:

uv run python main.py
uv run pytest
uv run ruff check .
uv run mypy src/

لا حاجة للتفعيل، لا قلق من Python الخاطئ.

النمط 3: uvx لتشغيل أدوات CLI مستقلة

تريد تشغيل أداة مؤقتاً بدون إضافتها للمشروع؟ استخدم uvx (مكافئ لـ uv tool run):

# عند الطلب، يمكن التخلص منه
uvx ruff check .
uvx pycowsay "مرحباً uv"
 
# تثبيت إصدار
uvx ruff@0.5.0 check
 
# عندما يختلف اسم الحزمة عن الأمر
uvx --from httpie http https://httpbin.org/get

uvx ينشئ بيئة مؤقتة لتشغيل الأداة بدون تلويث مشروعك — مثل تذوق طعام بدون شراء الباقة بأكملها. مثالي للحظات "أريد فقط تجربة هذا".

النمط 4: تبعيات السكريبت المضمّنة (PEP 723)

سكريبت واحد، لا تريد إنشاء مشروع؟ استخدم بيانات السكريبت المضمّنة:

# /// script
# dependencies = ["requests", "rich"]
# ///
 
import requests
from rich.pretty import pprint
 
r = requests.get("https://api.github.com/zen")
pprint(r.text)
uv add --script fetch.py requests rich
uv run fetch.py

أو في سطر واحد:

uv run --with requests --with rich fetch.py

النمط 5: الترحيل من requirements.txt

مشروع موجود مع requirements.txt؟ خذه مباشرةً:

uv add -r requirements.txt

أو اجمعه في lockfile ثم زامن:

uv pip compile requirements.in -o requirements.txt
uv pip sync requirements.txt

بعد الترحيل، تعامل مع pyproject.toml كالمصدر الأساسي — يمكن استخدام requirements.txt كتنسيق تصدير.

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

بعد تدريب الأنماط اليومية، إذا أردت تجربة تبديل إصدارات Python أو واجهة pip أو إعداد monorepo:
👉 متقدم