للانتقال من pip إلى uv، ثبّت البرنامج الثنائي uv، ثم استبدل أوامرك اليومية واحدًا بواحد: uv venv بدلًا من python -m venv، و uv add بدلًا من pip install، و uv run بدلًا من تفعيل بيئة افتراضية يدويًا. إن uv أداة واحدة مبنية على لغة Rust من Astral (الفريق الذي يقف وراء مدقق Ruff)، وهي تدمج pip و virtualenv و pip-tools و pipx و pyenv في أمر واحد، وتضع قياسات الأداء الخاصة بـ Astral سرعتها عند 10-100x أسرع من pip في عمليات التثبيت مع ذاكرة تخزين مؤقت دافئة. يغطي هذا الدليل الأوامر الدقيقة، وورقة أوامر مرجعية كاملة للانتقال من pip إلى uv، وكيفية ترحيل مشروع قائم، والحالات التي لا ينبغي فيها الانتقال بعد.
ما هو uv، ولماذا الانتقال من pip؟
إن uv هو مدير حزم ومشاريع للغة Python مكتوب بلغة Rust ويهدف إلى أن يكون بديلًا واحدًا لمجموعة من الأدوات الأقدم. تصف وثائق uv الأداة بأنها "أداة واحدة لتحل محل pip و pip-tools و pipx و poetry و pyenv و twine و virtualenv وغيرها." والفكرة المطروحة هي السرعة والدمج: فبدلًا من تذكّر أي أداة تنشئ البيئات، وأيها تثبّت إصدارات التبعيات، وأيها تدير إصدارات Python، تستخدم uv لكل ذلك، وعمليات التثبيت التي كانت تستغرق عشرات الثواني مع pip كثيرًا ما تنتهي في أقل من ثانية بمجرد أن تصبح ذاكرة التخزين المؤقت دافئة.
تأتي السرعة من مُنزِّل متوازٍ، وذاكرة تخزين مؤقت عامة معنونة بالمحتوى تربط الحزم برابط صلب بدلًا من إعادة تنزيلها، ومُحلِّل تبعيات يجري حسابات التبعيات بسرعة أكبر من pip. بالنسبة لبرنامج نصي فردي يكون الفرق لطيفًا؛ أما بالنسبة لخطوط أنابيب CI وبنى Docker التي تعيد تثبيت التبعيات في كل تشغيل، فإنه يتراكم ليصبح دقائق حقيقية موفّرة في كل عملية بناء. ولهذا انتقل uv من مجرد فضول في عام 2024 إلى، وفقًا لمقال كتبه أحد المطورين في عام 2026، مدير حزم Python المفضّل للمشاريع الجديدة.
ثبّت uv دون إفساد إعدادك الحالي
يُثبَّت uv كبرنامج ثنائي مستقل، لذا فهو يقف إلى جانب Python و pip الموجودين لديك بدلًا من أن يحل محلهما. على macOS أو Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
على Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
يمكنك أيضًا الحصول عليه من Homebrew (brew install uv)، أو pipx، أو من pip نفسه. بعد التثبيت، شغّل uv --version للتأكيد، و uv self update للترقية لاحقًا. لا شيء في تثبيت uv يمسّ Python الخاص بنظامك، أو بيئاتك الافتراضية القائمة، أو pip العام لديك، لذا يمكنك تبنّيه مشروعًا بمشروع والتراجع في أي وقت بمجرد العودة إلى أوامرك القديمة.
ورقة الأوامر المرجعية للانتقال من pip إلى uv
معظم عملية الترحيل هي ذاكرة عضلية. يربط هذا الجدول الأوامر التي تعرفها بالفعل بمكافئاتها في uv:
| المهمة | pip / الأداة القديمة | مكافئ uv |
|---|---|---|
| إنشاء بيئة افتراضية | python -m venv .venv | uv venv |
| إضافة تبعية إلى مشروع | pip install requests | uv add requests |
| التثبيت من ملف requirements | pip install -r requirements.txt | uv pip install -r requirements.txt |
| إزالة تبعية | pip uninstall requests | uv remove requests |
| تثبيت الإصدارات الدقيقة | pip freeze > requirements.txt | uv lock (يكتب uv.lock) |
| إعادة إنتاج البيئة المثبّتة | pip install -r requirements.txt | uv sync |
| تشغيل برنامج نصي في البيئة | source .venv/bin/activate && python app.py | uv run app.py |
| تثبيت أداة CLI بشكل عام | pipx install ruff | uv tool install ruff |
| تشغيل أداة مرة واحدة، دون تثبيت | pipx run black . | uvx black . |
| تثبيت إصدار Python | pyenv install 3.12 | uv python install 3.12 |
| تثبيت إصدار Python الخاص بالمشروع | pyenv local 3.12 | uv python pin 3.12 |
العادة الوحيدة التي يستحق التخلي عنها هي التفعيل اليدوي. يقوم uv run بحل البيئة الصحيحة وتفعيلها تلقائيًا، لذا يصبح source .venv/bin/activate اختياريًا. كما يحتفظ uv بواجهة متوافقة مع pip ضمن uv pip للحالات التي تريد فيها بديلًا شبه فوري دون تبنّي سير عمل المشروع الكامل.
رحّل مشروعًا قائمًا خطوة بخطوة
بالنسبة لمشروع يستخدم حاليًا ملف requirements.txt، تستغرق الخطوة بضع دقائق:
- هيّئ uv في المشروع. شغّل
uv initفي جذر المشروع. ينشئ هذا ملفpyproject.toml(المعيار الحديث لإعلان التبعيات) دون الكتابة فوق شفرتك. - استورد تبعياتك القائمة. شغّل
uv add -r requirements.txtلقراءة كل حزمة مثبّتة الإصدار من الملف القديم وتسجيلها فيpyproject.toml، ثم حلّها وثبّتها. - أودِع ملف القفل. يكتب uv ملف
uv.lock، وهو ملف قفل متعدد المنصات يثبّت رسم التبعيات بالكامل. أودِع كلًا منpyproject.tomlوuv.lockحتى يثبّت زملاؤك في الفريق و CI الإصدارات نفسها تمامًا. - بدّل أوامر التشغيل لديك. استبدل
python script.pyبـuv run script.py، وفي CI استبدل خطوة pip install بـuv sync --frozen(التي تفشل إذا كان ملف القفل قديمًا، ملتقطة أي انحراف قبل النشر). - احذف الملفات القديمة بمجرد أن يصبح كل شيء أخضر. بعد نجاح CI على uv، يمكنك إزالة
requirements.txtوأيrequirements-dev.txt، ونقل أدوات التطوير إلى مجموعة تبعيات فيpyproject.tomlبدلًا من ذلك.
يوثّق دليل مشاريع Astral كل خطوة من هذه الخطوات بالتفصيل، بما في ذلك كيفية هيكلة مجموعات التبعيات الاختيارية والتطويرية.
إدارة إصدارات Python باستخدام uv (وداعًا pyenv)
يمكن لـ uv تثبيت مفسّرات Python وتبديلها بنفسه، وهي الميزة التي تتيح له إحالة pyenv إلى التقاعد. يقوم uv python install 3.12 بتنزيل بناء مستقل من CPython 3.12؛ ويُظهر uv python list ما هو مثبّت ومتاح؛ ويكتب uv python pin 3.12 ملف .python-version بحيث يستخدم المشروع ذلك المفسّر دائمًا. ووفقًا لـ دليل إدارة Python من Astral، سيقوم uv حتى بتثبيت إصدار Python المطلوب تلقائيًا في المرة الأولى التي تشغّل فيها مشروعًا يحتاج إليه، بحيث يمكن لمساهم جديد استنساخ مستودع وتشغيل uv sync دون تثبيت Python بشكل منفصل أولًا. هذا السلوك وحده يزيل واحدًا من أكثر إخفاقات الانضمام شيوعًا في فرق Python.
تشغيل البرامج النصية والأدوات: uv run و uvx
يغطي أمران معظم العمل اليومي. يشغّل uv run أمرًا داخل بيئة المشروع، منشئًا أو محدّثًا تلك البيئة أولًا عند الحاجة، بحيث يعمل uv run pytest دائمًا مقابل التبعيات المثبّتة دون أي خطوة تفعيل. أما uvx (اختصار لـ uv tool run) فيشغّل أداة CLI في بيئة مؤقتة دون تثبيتها في مشروعك، بحيث يدقّق uvx ruff check . شفرتك باستخدام Ruff حتى لو لم يكن Ruff تبعية للمشروع. وبالنسبة للأدوات التي تستخدمها باستمرار، يضعها uv tool install ruff على مسار PATH لديك بشكل دائم، محلًا محل pipx. كما يدعم uv تبعيات البرامج النصية المضمّنة، بحيث يمكن لبرنامج نصي من ملف واحد إعلان متطلباته الخاصة في كتلة تعليقات وتشغيله بـ uv run script.py، مع قيام uv ببناء بيئة مؤقتة على الفور.
المزالق ومتى لا ينبغي الانتقال بعد
إن uv سريع ومستقر بما يكفي للإنتاج، لكنه صادق بشأن كونه قبل الإصدار 1.0: فحتى أواخر أغسطس 2026، الإصدار الأحدث هو 0.12.5، والمشروع لم يُصدر إصدار 1.0. وعمليًا يعني ذلك حدوث تغييرات كاسرة أحيانًا بين الإصدارات الثانوية، لذا ثبّت إصدار uv لديك في CI (ينشر uv إجراء GitHub Action وصور Docker لهذا الغرض) بدلًا من سحب الأحدث دائمًا. وهناك بضعة أمور أخرى ينبغي وزنها قبل الانتقال:
- فرق Poetry أو PDM. إذا كان مشروعك يستخدم Poetry بالفعل مع ملف
poetry.lockيعمل، فإن العائد أصغر والترحيل أكثر تعقيدًا من مجرد نقلrequirements.txtبسيط. انتقل عندما تكون السرعة مهمة لك، لا بصورة انعكاسية. - conda / الحزم العلمية. يستهدف uv منظومة PyPI. فإذا كنت تعتمد على conda للحزم العلمية المُصرَّفة أو التبعيات غير الخاصة بـ Python، فإن uv لا يحل محل conda، ويحتاج خلط الاثنين إلى عناية.
- الفهرس والمرايا المؤسسية. وجّه uv إلى فهرس خاص عبر
UV_INDEX_URLأو إعداداتpyproject.tomlقبل طرحه على شبكة داخلية، بالطريقة نفسها التي كنت تعدّ بها pip. - ملف القفل ليس اختياريًا. لا يتحقق مكسب قابلية إعادة الإنتاج إلا إذا أودعت
uv.lockواستخدمتuv sync --frozenفي CI. وتجاوز ذلك يتركك في وضع لا أفضل من عمليات pip install الفضفاضة.
تبنّه في مشروع جانبي جديد أولًا، واستشعر السرعة، ثم انقله إلى مستودعاتك الرئيسية. وإذا كنت تحوسب بناءاتك في حاويات، فإن إقران uv بصورة أساسية نحيلة يضاعف المكسب، وهو منطق قابلية إعادة الإنتاج نفسه الذي يقف وراء مقارنتنا بين Podman و Docker، ويستحق الإعداد جنبًا إلى جنب مع سير عمل نظيف لـ git worktrees للفروع المتوازية. كما ستريده الفرق التي تؤتمت البناءات دون تدخل في أي خط أنابيب CI أو وكيل مبرمَج.
الأسئلة الشائعة
كيف أشغّل ملف Python باستخدام uv؟
استخدم uv run app.py. يحل uv تبعيات المشروع، وينشئ البيئة الافتراضية أو يحدّثها عند الحاجة، ويشغّل الملف داخلها، بحيث لا تضطر أبدًا إلى تفعيل البيئة يدويًا. وبالنسبة لأداة تُستخدم مرة واحدة، استخدم uvx <tool> لتشغيلها في بيئة مؤقتة.
هل ما زلت بحاجة إلى تفعيل بيئتي الافتراضية مع uv؟
لا. يعمل uv run و uv sync على مجلد .venv الخاص بالمشروع تلقائيًا. ما زال بإمكانك تشغيل source .venv/bin/activate إن كنت تفضّل جلسة صدفة تقليدية، وينشئ uv venv بيئة افتراضية قياسية تُفعَّل بالطريقة نفسها، لكن التفعيل اختياري للعمل العادي.
هل uv آمن للاستخدام في الإنتاج؟ يُستخدم uv على نطاق واسع في الإنتاج في عام 2026 وهو مدعوم من Astral، لكنه ما زال قبل الإصدار 1.0 (0.12.5 في وقت كتابة هذا المقال)، لذا ثبّت إصدار uv دقيقًا في CI واقرأ سجل التغييرات قبل الترقية. وبناءات Python التي يثبّتها هي توزيعات CPython مستقلة، وليست نسخًا معدّلة.
كيف أستخدم uv Python في VS Code؟
شغّل uv sync لإنشاء مجلد .venv، ثم في VS Code افتح لوحة الأوامر، واختر "Python: Select Interpreter"، واختر المفسّر الموجود داخل مجلد .venv الخاص بمشروعك. عندئذٍ يستخدم VS Code بيئة uv للتشغيل والتنقيح والتدقيق.
Sources
- Astral — وثائق uv: قياس الأداء "10-100x أسرع من pip" وقائمة الأدوات التي يحل uv محلها.
- Astral — دليل العمل على المشاريع:
uv initوuv addوملفات القفل ومجموعات التبعيات. - Astral — تثبيت Python وإدارته: كيف يثبّت uv إصدارات Python ويثبّتها.
- إصدارات astral-sh/uv (GitHub): إصدارات 0.12.x الحالية وحالة ما قبل الإصدار 1.0.
- Real Python — إدارة مشاريع Python باستخدام uv: جولة شاملة في سير عمل uv.
- DEV — لماذا أصبح uv مدير حزم Python المفضّل في عام 2026: سياق التبنّي والأساس المنطقي للسرعة.
وقاص احمد وسیر
وقاص احمد وسیر مطوّر ومهندس أتمتة بخبرة تزيد على 8 سنوات في بناء أنظمة إنتاجية يستخدمها أكثر من 100 ألف شخص. يبني تطبيقات SaaS متعددة المستأجرين، وأتمتة بالذكاء الاصطناعي (n8n، تدفقات LLM، بوتات واتساب)، وبنية استضافة (WHM/cPanel، CloudLinux) — وهو صانع WaSphere وFlowMaticX وعلامة الاستضافة WaseerHost. أنجز أكثر من 100 مشروع لشركات صغيرة ومتوسطة ووكالات وشركات ناشئة ممولة.



