أداة uv من Astral: وداعاً لبطء Pip وتعقيدات Poetry… مستقبل بايثون يُكتب بلغة Rust

يا جماعة الخير، السلام عليكم ورحمة الله.

اسمحوا لي أحكي لكم قصة صارت معي قبل كم شهر. كنا شغالين على مشروع ذكاء اصطناعي كبير، من المشاريع اللي فيها مكتبات بالهبل، من TensorFlow و PyTorch لـ Scikit-learn وكمشة مكتبات لمعالجة البيانات. ملف الـ requirements.txt تبعنا كان أطول من قائمة مشتريات لبيت بدو يتأثث من الصفر.

المشكلة ما كانت في كثرة المكتبات، المشكلة كانت في المعاناة اليومية معها. كل ما زميل جديد ينضم للفريق، يقعدله ساعة زمن بس عشان يعمل pip install -r requirements.txt. ولو صارت مشكلة توافق بين نسختين، يا ويل قلبي! بنقضي نص اليوم نحل مشاكل الاعتماديات (Dependencies). أما الـ CI/CD pipeline تبعنا، فكانت خطوة تثبيت الحزم هي “استراحة القهوة الإجبارية”، لأنها كانت تاخذ بين 10 لـ 15 دقيقة في كل مرة!

في ليلة من الليالي، وأنا بحاول أسلّم تحديث عاجل، علق الـ build بسبب خطأ غامض في التوافقية مع Poetry. قعدت ساعات طويلة وأنا بحاول أفهم شو القصة. وقتها قلت لحالي: “معقول في 2024 ولسه بنعاني من هاي المشاكل البدائية؟ لازم يكون في حل أحسن”. ومن كثر البحث والتنقيب، وقعت عيني على أداة اسمها uv من شركة Astral. قرأت عنها كم سطر: “مثبّت حزم بايثون مكتوب بلغة Rust… أسرع بـ 10-100 مرة من pip”. بصراحة، قلت أكيد ببالغوا. بس من باب الفضول، قررت أجربها. والنتيجة؟ الـ 15 دقيقة صارت أقل من 30 ثانية. وقتها عرفت إنه القصة جد، وإنه مستقبل تطوير بايثون تغير قدام عيني.

جحيم الاعتماديات: معاناة مطوري بايثون التاريخية

أي حدا اشتغل بايثون لفترة بيعرف شو يعني “Dependency Hell” أو “جحيم الاعتماديات”. هي الحالة اللي بتصير فيها إدارة حزم المشروع كابوس:

  • بطء شديد: pip، الأداة الأساسية، بطيئة جدًا في حل الاعتماديات (Resolving) خصوصًا في المشاريع الكبيرة.
  • بيئات غير متطابقة: كثيرًا ما تعمل الحزم على جهازك، لكنها تفشل على جهاز زميلك أو على السيرفر، بسبب اختلافات بسيطة في البيئة.
  • تعقيد الأدوات: ظهرت أدوات مثل Poetry و pip-tools لتحل بعض هذه المشاكل، لكنها أضافت طبقة جديدة من التعقيد وأحيانًا كانت بطيئة هي الأخرى.
  • تعدد الأدوات: بتحتاج أداة للبيئات الافتراضية (venv)، وأداة لتثبيت الحزم (pip)، وأداة لإدارة المشروع (Poetry أو Flit)، وأداة لإدارة نسخ بايثون (pyenv). قصة طويلة عريضة!

هذه المعاناة كانت ضريبة ندفعها كلنا كمطوري بايثون. كنا نقبل فيها لأنه ما كان فيه بديل حقيقي… حتى الآن.

لماذا Rust؟ سر السرعة الخارقة في uv

السؤال اللي بيطرح نفسه: كيف قدرت أداة uv تحقق هاي السرعة الجنونية؟ الجواب من الآخر في كلمة واحدة: Rust.

لغة Rust اللي طورتها Mozilla مش مجرد لغة برمجة جديدة، هي فلسفة مختلفة في بناء البرمجيات. إليكم كيف مكنت Rust أداة uv من التفوق:

  1. الأداء الخام (Raw Performance): لغة Rust تُترجم مباشرة إلى كود الآلة (native machine code) مثل C++، بدون أي طبقات وسيطة مثل الـ Virtual Machine تبع جافا أو مُفسّر بايثون. هذا يعني سرعة قصوى في التنفيذ.
  2. التوازي المتقدم (Advanced Concurrency): حل الاعتماديات وتنزيل الحزم هي عمليات يمكن أن تحدث بالتوازي. Rust مصممة من الصفر للتعامل مع المهام المتوازية بأمان وكفاءة عالية، مما يسمح لـ uv بتنزيل وحل شجرة الاعتماديات بشكل متوازٍ وبسرعة فائقة، بينما pip يعمل بشكل تسلسلي إلى حد كبير.
  3. لا جامع قمامة (No Garbage Collector): لغات مثل بايثون وجافا تستخدم “جامع القمامة” لإدارة الذاكرة، وهذا يسبب توقفات صغيرة وغير متوقعة في أداء البرنامج. Rust تستخدم نظام “الملكية” (Ownership) لإدارة الذاكرة وقت الترجمة (compile-time)، مما يلغي الحاجة لجامع القمامة ويضمن أداءً ثابتًا وسريعًا بدون أي توقفات.
  4. الموثوقية والأمان: نظام Rust الصارم في التحقق من الكود وقت الترجمة يمنع فئات كاملة من الأخطاء الشائعة المتعلقة بالذاكرة، مما يجعل uv أداة موثوقة جدًا وصعبة الانهيار.

نصيحة من أبو عمر: لا تنظر إلى uv على أنها مجرد “pip سريعة”. انظر إليها كأداة مصممة من الألف إلى الياء على أسس هندسية حديثة لحل مشاكل قديمة. السرعة هي مجرد عرض جانبي جميل للتصميم الممتاز.

الدليل الشامل للاستبدال: من pip و poetry إلى uv

طيب يا أبو عمر، حمستنا! كيف نبدأ؟ الموضوع أبسط مما بتتخيل. uv صُممت لتكون بديلًا مباشرًا (drop-in replacement) لمعظم أوامر pip.

الخطوة 0: تثبيت uv

تثبيت uv نفسها عملية سهلة جدًا. افتح الطرفية (Terminal) واكتب الأمر المناسب لنظامك:

# على macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# على Windows (PowerShell)
irm https://astral.sh/uv/install.ps1 | iex

وهيك بتكون uv جاهزة على جهازك.

الخطوة 1: استبدال `venv` و `pip`

لنفترض أنك تبدأ مشروعًا جديدًا أو تعمل على مشروع حالي يستخدم requirements.txt.

الطريقة القديمة (venv + pip):

# 1. إنشاء بيئة افتراضية
python -m venv .venv

# 2. تفعيل البيئة
source .venv/bin/activate  # على Linux/macOS
.venvScriptsactivate    # على Windows

# 3. تثبيت الحزم (بطيء!)
pip install -r requirements.txt

الطريقة الجديدة مع uv (زي الحلاوة):

# 1. إنشاء بيئة افتراضية (uv تكتشفها تلقائيًا)
uv venv

# 2. تثبيت الحزم (سريع جدًا!)
# لا داعي لتفعيل البيئة، uv تديرها بنفسها
uv pip install -r requirements.txt

# أو الأفضل من ذلك، استخدم sync لضمان بيئة نظيفة 100%
uv pip sync requirements.txt

الأمر uv pip sync هو الجوهرة الحقيقية هنا. فهو لا يثبت الحزم الموجودة في الملف فقط، بل يحذف أي حزمة مثبتة في البيئة وغير موجودة في الملف. هذا يضمن أن بيئتك مطابقة تمامًا لما هو مطلوب، لا أكثر ولا أقل. وداعًا للفوضى!

الخطوة 2: استبدال `Poetry` أو `pip-tools`

إذا كنت تستخدم pyproject.toml لإدارة اعتماديات مشروعك (وهو الأسلوب الحديث والموصى به)، فـ uv تدعمك بشكل كامل.

في هذا السيناريو، uv تعمل كبديل لأمر poetry lock و poetry install أو pip-compile و pip-sync.

لنفترض أن ملف pyproject.toml الخاص بك يبدو هكذا:

[project]
name = "my-ai-project"
version = "0.1.0"
dependencies = [
    "fastapi",
    "pydantic",
    "numpy",
]

[project.optional-dependencies]
dev = [
    "pytest",
    "ruff",
]

سير العمل مع uv يكون كالتالي:

# 1. إنشاء بيئة افتراضية
uv venv

# 2. توليد ملف requirements.lock من pyproject.toml
# هذا يحل كل الاعتماديات ويثبتها في ملف واحد
uv pip compile pyproject.toml -o requirements.lock

# 3. تثبيت الحزم من ملف الـ lock في البيئة الافتراضية
uv pip sync requirements.lock

# 4. لتثبيت حزم التطوير (dev) أيضًا
uv pip compile pyproject.toml --extra dev -o dev-requirements.lock
uv pip sync dev-requirements.lock

هذا النهج يجمع أفضل ما في العالمين: إدارة الاعتماديات المركزية والواضحة عبر pyproject.toml كما في Poetry، مع سرعة uv الخارقة في حل الاعتماديات وتثبيتها.

الميزات المتقدمة: ما وراء تثبيت الحزم

قوة uv لا تتوقف هنا. فهي تقدم نفسها كصندوق عدة متكامل لمطور بايثون.

إدارة نسخ بايثون

هل سبق واحتجت لمعرفة كل نسخ بايثون المثبتة على جهازك؟ بدلًا من استخدام pyenv، يمكنك ببساطة أن تكتب:

uv python find

سيعرض لك قائمة بكل نسخ بايثون المتاحة، مع مساراتها. هذا مفيد جدًا عند العمل على مشاريع متعددة تتطلب نسخ بايثون مختلفة.

تشغيل الأوامر والسكربتات المؤقتة (Ephemeral Execution)

هذه من أروع الميزات برأيي. كم مرة احتجت أن تشغل أداة مثل black لترتيب الكود، أو ruff لتدقيقه، لكنك لا تريد تثبيتها في بيئة المشروع لتجنب تضخيمها؟

مع uv، الأمر بسيط جدًا باستخدام uv run:

# شغل black لترتيب الكود بدون تثبيته بشكل دائم
uv run black .

# شغل pytest لاختبار الكود
uv run pytest

# يمكنك حتى تحديد حزم لتثبيتها مؤقتًا لتشغيل سكربت معين
uv run --with pandas --with matplotlib my_script.py

ما يحدث خلف الكواليس هو سحر: uv تنشئ بيئة مؤقتة معزولة، تثبت الحزم المطلوبة فيها (بسرعة البرق طبعًا)، تشغل الأمر أو السكربت، ثم تحذف البيئة بأكملها. نظافة، سرعة، وكفاءة. من الآخر!

الخلاصة: uv هي المعيار الجديد لمشاريع بايثون ✅

بعد شهور من استخدام uv في كل مشاريعي، الصغيرة والكبيرة، أستطيع القول بثقة: هذه الأداة ليست مجرد تحسين، بل هي نقلة نوعية في عالم بايثون. هي توحيد للأدوات، وتبسيط للعمليات، وتسريع هائل للإنتاجية.

uv تأخذ أفضل الأفكار من pip، venv، pip-tools، Poetry، و pyenv، وتدمجها في أداة واحدة، متماسكة، وسريعة بشكل لا يصدق. التبني المتزايد لها في المشاريع الكبيرة مفتوحة المصدر (مثل pandas) هو دليل على أنها ليست مجرد “موضة عابرة”.

أتوقع وبقوة أن تصبح uv الأداة القياسية (de facto standard) لإدارة الحزم والبيئات في مشاريع بايثون بحلول عام 2025.

نصيحتي الأخيرة لكم: لا تخافوا من التغيير. خصصوا ساعة من وقتكم لتجربة uv في مشروعكم التالي أو حتى في مشروع شخصي قديم. أنا متأكد أنكم بعد أن تروا فرق السرعة والسهولة، لن تعودوا أبدًا إلى الوراء. المستقبل وصل، وهو مكتوب بلغة Rust.

يلا يا جماعة، جربوها وأعطوني رأيكم. بالتوفيق في رحلتكم البرمجية!

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

أتمتة العمليات

قهوتك الصباحية مع ملخص الإنجازات: كيف تبني داشبورد يومي يصلك على الموبايل باستخدام n8n والذكاء الاصطناعي

كف عن تشتيت نفسك كل صباح بين Jira وGitHub والإيميلات. تعلم معي، أبو عمر، كيف تبني ورك فلو أتمتة يرسل لك ملخصاً ذكياً ومنسقاً بإنجازات...

12 فبراير، 2026 قراءة المزيد
البودكاست