سؤال

يجب استخدام مطور آخر وأنا غير موافق حول ما إذا كان يجب استخدام PythonPath أو sys.path للسماح بثثون للعثور على حزمة بيثون في دليل المستخدم (على سبيل المثال، التطوير).

لدينا مشروع بيثون مع هيكل الدليل النموذجي:

Project
    setup.py
    package
        __init__.py
        lib.py
        script.py

في النصي. نحن بحاجة إلى القيام به import package.lib. وبعد عندما يتم تثبيت الحزمة في حزم الموقع، يمكن أن تجد Script.py package.lib.

عند العمل من دليل المستخدم، ومع ذلك، يجب القيام بشيء آخر. الحل الخاص بي هو تعيين بلدي pythonpath لتشمل "~ / المشروع". يريد مطور آخر وضع هذا الخط من التعليمات البرمجية في بداية Script.py:

sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

بحيث يمكن لبثون العثور على نسخة محلية من package.lib.

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

يجب أن نستخدم PytohnPath، sys.path، أو إما بخير؟

هل كانت مفيدة؟

المحلول

إذا كان السبب الوحيد لتعديل المسار مخصص للمطورين الذين يعملون من شجرة العمل الخاصة بهم، فيجب عليك استخدام أداة تثبيت لإعداد بيئتك لك. Virtualenv شائعة جدا، وإذا كنت تستخدم Setuptools، يمكنك ببساطة تشغيل setup.py develop إلى شبه تثبيت شجرة العمل في تثبيت Python الحالي الخاص بك.

نصائح أخرى

أنا أكره pythonpath. أجد أنها هشة ومزعجة لتعيين أساس لكل مستخدم (خاصة لمستخدمي الخفيين) وتتبع مجلدات المشروع تتحرك حولها. أنا أفضل مجموعة sys.path في البرامج النصية لاستدعاء المشاريع المستقلة.

لكن sys.path.append ليست هي الطريقة للقيام بذلك. يمكنك بسهولة الحصول على التكرارات، ولا يقوم بذلك .pth الملفات. أفضل (وأكثر قابلية للقراءة): site.addsitedir.

و script.py لن يكون عادة مكان أكثر ملاءمة للقيام بذلك، كما هو داخل الحزمة التي تريد إتاحةها على المسار. يجب أن تكون وحدات المكتبة بالتأكيد لا تمس sys.path أنفسهم. بدلا من ذلك، عادة ما يكون لديك برنامج نصي هش خارج الحزمة التي تستخدمها لإرساء التطبيق وتشغيله، وهو في هذا البرنامج النصي التجمع Trivial الذي تضع تفاصيل النشر sys.path- probbing.

بشكل عام، أود أن أفكر في إنشاء متغير بيئة (مثل PythonPath) بممارسة سيئة. في حين أن هذا قد يكون على ما يرام لتصحيح الأخطاء ولكن باستخدام هذا كما
ممارسة منتظمة قد لا تكون فكرة جيدة.

استخدام البيئة المتغير يؤدي إلى مواقف مثل "يعمل بالنسبة لي" عندما
آخر تقارير المشاكل في قاعدة التعليمات البرمجية. أيضا قد يحمل المرء نفس الممارسة مع بيئة الاختبار أيضا، مما يؤدي إلى مواقف مثل الاختبارات التي تعمل بشكل جيد لمطور معين ولكن ربما فشلت عند إجراء بعض الاختبارات.

جنبا إلى جنب مع العديد من الأسباب الأخرى المذكورة بالفعل، يمكنك أيضا توجيه Outh هذا الترميز الصعب

sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

هش لأنه يفترض موقع النصوص. فان سيعمل فقط إذا كان Script.py موجود في المشروع / الحزمة. سوف ينكسر إذا قرر المستخدم نقل / نسخ / symlink script.py (تقريبا) في أي مكان آخر.

أعتقد أنه في هذه الحالة باستخدام PythonPath هو أفضل شيء، ومعظمه لأنه لا يعرض (مشكوك فيه) رمز غير عملي.

بعد كل شيء، إذا كنت تفكر في ذلك، المستعمل لا تحتاج إلى ذلك sys.path شيء، لأن الحزمة الخاصة بك سوف تتثبيت في حزم الموقع، لأنك ستستخدم نظام التعبئة والتغليف.

إذا اختار المستخدم تشغيل من "نسخ محلي"، فأما لاحظت ذلك، فإن الممارسة المعتادة هي الدولة، أن الحزمة تحتاج إلى إضافة إلى PythonPath يدويا، إذا تم استخدامها خارج حزم الموقع وبعد

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top