في Python 3.8 ، يُقترح إضافة بديل للبيئات الافتراضية - دليل محلي يحتوي على حزم PEP 582 حزم Python المحلية .
يقترح PEP إضافة آلية للكشف تلقائيًا عن دليل __pypackages__
في Python واستخدامه عند الاستيراد كمصدر للحزم المثبتة. سيكون للدليل __pypackages__
أولوية أعلى عند الاستيراد من دلائل الحزمة العامة أو المخصصة. سيمنع هذا إنشاء أو تنشيط أو إلغاء تنشيط البيئات الافتراضية.
هذا هو الشكل الذي __pypackages__
بنية الحزمة التي تستخدم __pypackages__
في Python 3.8:
foo __pypackages__ 3.8 lib bottle myscript.py
في هذه المقالة ، سأوضح لك كيفية استخدام الدليل المحلي مع الحزم دون انتظار خروج Python 3.8.
توضح هذه المقالة مثالًا أساسيًا تم اختباره في Linux ، Python 3.5. بالنسبة إلى الأنظمة الأساسية الأخرى ، قد تحتاج إلى إجراء تغييرات.
تثبيت الحزم في دليل محلي
التثبيت هو نفسه تقريبا تثبيت الحزم باستخدام نقطة ، باستثناء خيار - --target
. في ذلك نشير إلى المسار الكامل أو النسبي إلى الدليل مع الحزم المحلية.
pip3 install --target="$PWD/__pypackages__/3.5/lib/" bar
PWD $ متغير مع دليل العمل الحالي.
سيتم إنشاء شجرة الدليل التالية:
foo __pypackages__ 3.5 lib bar myscript.py
يجب تحديد إصدار Python والدلائل الفرعية يدويًا.
قد تكون هناك أيضًا مشاكل إذا كنت بحاجة إلى تثبيت حزم برمز ثنائي ولإنشاءات مختلفة. لم يكن لدي مثل هذه الحزم ، ولكن كحل ، يمكنك إضافة المزيد من البنية إلى بنية الدليل.
خيار التثبيت آخرهناك طريقة أخرى لتثبيت الحزم في دليل محدد:
pip3 install --ignore-installed --install-option="--prefix=$PWD/__pypackages__" --install-option="--no-compile" bar
لكن يجب عليك تحديد المسار الكامل لموقع التثبيت وستختلف شجرة الدليل عن المسار المقترح في PEP 582:
foo __pypackages__ lib python3.5 site-packages bar myscript.py
باستخدام الدليل المحلي مع الحزم
بعد تثبيت الحزم ، يبقى إخبار المترجم أين تبحث عن التبعيات.
للقيام بذلك ، قم بإضافة المسار إلى الدليل المحلي مع الحزم إلى قائمة sys.path
. يكفي إضافة المسار إلى الوحدة الرئيسية (أول تحميل) ، إضافة إلى الباقي ليست ضرورية. بعد ذلك ، يمكنك استيراد الحزم المثبتة محليًا.
import os import sys _PATH = '/__pypackages__/3.5/lib/' sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)) + _PATH) import bar
الشرط الوحيد هو أن الوحدة الرئيسية يجب أن تكون في نفس مستوى التعشيش كدليل __pypackages__
.
هناك طريقة أخرى لإخبار Python بالبحث عن الحزم وهي تعيين متغير بيئة قبل تشغيل البرنامج النصي.
PYTHONPATH="$PWD/__pypackages__/3.5/lib/:$PYTHONPATH" python3 ./myscript.py
بهذه الطريقة البسيطة ، يمكنك تحقيق وظائف مماثلة ل PEP 582 في الوقت الحالي.