uv يلتهم سلسلة أدوات بايثون — pip و virtualenv و pyenv و poetry في ملف ثنائي Rust واحد

مشاركة:
uv يلتهم سلسلة أدوات بايثون — pip و virtualenv و pyenv و poetry في ملف ثنائي Rust واحد

لطالما كانت سلسلة أدوات بايثون أشبه بمرحلة المراهقة المحرجة في نظام بيئي ناضج. كنت بحاجة إلى pip للحزم، و virtualenv أو venv للعزل، و pyenv لإدارة إصدارات بايثون، و pip-tools أو poetry أو pipenv لقفل التبعيات. كل أداة كانت تحل مشكلة واحدة وتخلق احتكاكًا مع الأخرى. uv، التي أصدرتها Astral في فبراير 2024، هي أول أداة تحل كل هذه المشكلات — وتفعل ذلك باستخدام Rust، بسرعات تجعل الجيل السابق يبدو وكأنه يعمل على اتصال طلب هاتفي.

ما الذي تستبدله uv فعليًا

جدول المقارنة مهم هنا لأن uv لا تضيف ميزات فقط — بل تلغي أدوات:

pip install requestsuv pip install requests (أسرع بـ 10–100 مرة، دون حاجة إلى إعدادات)
python -m venv .venvuv venv (إنشاء بيئة افتراضية في أجزاء من الألف من الثانية)
pyenv install 3.12uv python install 3.12 (تثبيت بايثون مُدار، محدد لكل مشروع)
poetry add requestsuv add requests (إدارة التبعيات مع uv.lock)
pip-compile requirements.inuv pip compile (إنشاء ملف قفل)

الاختيار التصميمي الرئيسي هو ملف ثنائي واحد بدون تبعيات. تقوم بتثبيت uv مرة واحدة — عبر curl -LsSf https://astral.sh/uv/install.sh | sh أو عبر pip — وتتعامل مع دورة حياة مشروع بايثون بأكملها دون الحاجة إلى تثبيت بايثون نفسه مسبقًا.

فرق السرعة حقيقي

معايير Astral تظهر أن uv تثبت الحزم أسرع بـ 10–100 مرة من pip. التجربة الواقعية أقل دراماتيكية في التثبيتات الصغيرة لكنها مذهلة على نطاق واسع. تثبيت بارد لبيئة علوم بيانات (numpy, pandas, scikit-learn, matplotlib, jupyter) يستغرق 45-90 ثانية مع pip، يستغرق أقل من 5 ثوانٍ مع uv على نفس الجهاز، ويرجع ذلك أساسًا إلى أن uv تجعل التحميلات متوازية وتحل الرسم البياني للتبعيات في Rust بدلاً من بايثون. في أنظمة CI حيث يتم إعادة تثبيت التبعيات من الصفر بشكل متكرر، يتضاعف هذا الفرق عبر كل تشغيل خط أنابيب.

محلل التبعيات صحيح أيضًا بطرق لم يكن pip كذلك. محلل pip تاريخيًا كانت له حالات حدية حيث كان يثبت تبعيات متعارضة دون خطأ؛ محلل uv، الذي يستخدم خوارزمية PubGrub (نفس الخوارزمية المستخدمة من قبل مدير حزم pub الخاص بـ Dart)، يضمن أنه إذا وجد حل، فإنه يجده، وإذا لم يوجد، فإنه يعطي خطأ دقيقًا يشرح أي القيود تتعارض.

تنسيق uv.lock وقابلية التكرار

قدمت uv تنسيق ملف القفل الخاص بها (uv.lock) الذي يلتقط الرسم البياني الكامل للتبعيات المحلولة بما في ذلك تجزئات كل حزمة. هذه هي القطعة المفقودة التي جعلت إدارة تبعيات بايثون السابقة غير قابلة للتكرار على نطاق واسع. ملف requirements.txt مع تبعيات غير مقفلة كان دائمًا قنبلة موقوتة — كان سيتم تثبيته بشكل مختلف على أجهزة مختلفة أو في أوقات مختلفة مع تحديث الحزم العلوية. uv.lock متعدد المنصات، يشفر الحل لكل منصة بحيث يعمل نفس ملف القفل على لينكس، ماك، وويندوز دون ملفات قفل منفصلة لكل نظام تشغيل.

الاعتماد في النظام البيئي

كان اعتماد uv أسرع من أي أداة بايثون تقريبًا في الذاكرة الحديثة. يُظهر الرسم البياني للتبعيات العامة لـ GitHub ظهور uv في تكوينات CI للمشاريع مفتوحة المصدر الكبرى في غضون أشهر من إصدارها. تحولت الوثائق الرسمية لـ FastAPI إلى uv في منتصف 2024. فريق Jupyter يقيّم uv لإدارة بيئة الدفتر. هيئة تغليف بايثون (PyPA) لم تعتمد أي أداة واحدة رسميًا، لكن العديد من أعضائها تبنوا uv علنًا في مشاريعهم الخاصة.

حالة التمسك بـ poetry أو pip-tools هي بشكل أساسي توافق ملف القفل — الفرق التي لديها ملفات poetry.lock موجودة في سير عملها تواجه احتكاكًا في الترحيل. يمكن لـ uv الاستيراد من requirements.txt و pyproject.toml لكنها لا تستهلك poetry.lock مباشرة، مما يعني أن الاعتماد في قواعد الأكواد الناضجة يتطلب خطوة ترحيل ملف القفل.

مسألة Rye

تدير Astral أيضًا Rye، وهي أداة إدارة مشاريع عالية المستوى. العلاقة بين uv و Rye أصبحت واضحة: uv هي الطبقة الأساسية و Rye تتقارب مع uv كخلفية لها. Armin Ronacher (مبتكر Flask)، الذي بنى Rye، نقل المشروع إلى Astral مع توقع صريح أن uv ستحل محله في النهاية. للمشاريع الجديدة، التوصية هي uv مباشرة. تبقى Rye مفيدة للفرق التي تستخدمها بالفعل، لكنها ليست محور التطوير النشط.

مشاركة:
uv يلتهم سلسلة أدوات بايثون — pip و virtualenv و pyenv و poetry في ملف ثنائي Rust واحد | IRCNF - Intelligent Reliable Custom Next-gen Frameworks