نشر الثعبان تطبيق مشترك مع حزمة
-
11-07-2019 - |
سؤال
أنا أفكر في كيفية ترتيب نشر الثعبان التطبيق الذي سوف يكون
- للتنفيذ النصي الموجود في /usr/bin/ والتي سوف توفر CLI إلى وظائف تنفيذها في
- مكتبة تثبيت أينما الحالي حزم موقع الدليل.
الآن حاليا لدي الدليل التالي هيكل في المصادر:
foo.py
foo/
__init__.py
...
والتي اعتقد أنها ليست أفضل طريقة للقيام بالأشياء.أثناء تطوير كل شيء يعمل كما هو متوقع ، ومع ذلك عندما نشر "من فو استيراد FooObject" رمز في foo.py على ما يبدو محاولات استيراد foo.py نفسه ، وهو ليس سلوك أنا أبحث عن.
لذا فإن السؤال هو ما هو الممارسة القياسية بتدبير مثل هذه الحالات ؟ واحدة من الأشياء التي كنت أفكر فيه هو, عند تثبيت أو إعادة تسمية foo.py فقط فو الذي توقف عن استيراد نفسها ، ولكن يبدو محرجا نوعا ما...
جزء آخر من المشكلة ، أعتقد أن تسمية التحدي.ربما دعوة تنفيذ البرنامج النصي foo-bin.py?
المحلول
هذه المادة هو جيد جدا, ويظهر لك طريقة جيدة للقيام بذلك.البند الثاني من هل قائمة يجيب عن سؤالك.
وقح نسخ ولصق:
الملفات هيكل مشروع بيثون
قبل Jp Calderone
هل:
- اسم الدليل شيء ذات الصلة إلى المشروع الخاص بك.على سبيل المثال, إذا كان لديك المشروع المسمى "الملتوية" ، أعلى مستوى الدليل على مصدرها الملفات
Twisted
.عندما تفعل النشرات ، يجب أن تشمل رقم الإصدار لاحقة:Twisted-2.5
.- إنشاء دليل
Twisted/bin
و وضع الملفات التنفيذية ، لديك أي.لا تعطي لهم.py
التمديد ، حتى لو كانت بايثون الملفات المصدر.لا تضع أي كود في لهم إلا استيراد و الدعوة إلى الرئيسية وظيفة محددة في مكان آخر في المشاريع الخاصة بك.- إذا كان المشروع الخاص بك expressable واحد الثعبان الملف المصدر ، ثم وضعها إلى الدليل وتسميته شيء ذات الصلة إلى المشروع الخاص بك.بالنسبة سبيل المثال ،
Twisted/twisted.py
.إذا كنت تحتاج ملفات متعددة المصدر ، إنشاء حزمة بدلا من ذلك (Twisted/twisted/
, مع فارغةTwisted/twisted/__init__.py
) و مكان الملفات المصدر في ذلك.على سبيل المثال ،Twisted/twisted/internet.py
.- ضع وحدة الاختبارات الفرعية حزمة الحزمة الخاصة بك (ملاحظة - هذا يعني أن واحدة الثعبان الملف المصدر الخيار أعلاه كان خدعة - أنت دائما تحتاج واحد على الأقل الأخرى ملف وحدة الاختبارات).على سبيل المثال ،
Twisted/twisted/test/
.من هنا ، انها صفقة معTwisted/twisted/test/__init__.py
.مكان الاختبارات في الملفات مثلTwisted/twisted/test/test_internet.py
.- إضافة
Twisted/README
وTwisted/setup.py
لشرح تثبيت البرنامج ، على التوالي ، إذا كنت تشعر لطيفة.لا:
- وضع المصدر في دليل يسمى
src
أوlib
.وهذا يجعل من الصعب تشغيل بدون تثبيت.- وضع الاختبارات الخاصة بك خارج حزمة بايثون.هذا يجعل من الصعب تشغيل الاختبارات ضد تثبيت الإصدار.
- إنشاء حزمة فقط
__init__.py
ومن ثم وضع كل رمز في__init__.py
.جعل مجرد وحدة بدلا من حزمة ، هو أبسط.- في محاولة للتوصل إلى السحرية الخارقة على جعل الثعبان قادرة على استيراد وحدة أو مجموعة دون الحاجة للمستخدم إضافة الدليل الذي يحتوي عليه إلى استيراد مسار (إما عن طريق
PYTHONPATH
أو آلية أخرى).لن صحيح التعامل مع جميع الحالات و المستخدمين سوف تغضب عندما الخاص بك البرنامج لا يعمل في البيئة.
نصائح أخرى
Distutils يدعم تركيب وحدات وحزم البرامج النصية.إذا قمت بإنشاء distutils setup.py
والذي يشير إلى foo
كحزمة واحدة ، foo.py
كما النصي ، ثم foo.py
يجب أن تحصل على تثبيت /usr/local/bin
أو مهما كانت المناسبة النصي تثبيت المسار على الهدف OS ، foo
الحزمة يجب أن تحصل على تثبيت site_packages
الدليل.
يجب استدعاء القابلة للتنفيذ فقط foo
, لا foo.py
, ثم محاولات استيراد فو لن تستخدم ذلك.
أما عن تسمية بشكل صحيح:هذا من الصعب الإجابة في المجرد ، نحن بحاجة إلى أن تعرف على وجه التحديد ما يفعل.على سبيل المثال ، إذا كان بتكوين والضوابط ، واصفا إياه التكوين أو ctl قد يكون مناسبا.إذا كانت قذيفة API المكتبة يجب أن يكون نفس اسم المكتبة.
الخاص بك CLI وحدة هو شيء واحد ، حزمة من أن يدعم ذلك هو شيء آخر.لا تخلط بين الأسماء ويذ وحدة foo
(في ملف foo.py
) و حزمة foo
(في دليل foo
مع الملف __init__.py
).
لديك اثنين من الأشياء اسمه foo
:وحدة ومجموعة.ماذا تريد أن اسم foo
?الصف ؟ وظيفة ؟ وهو متغير ؟
اختيار مميز اسم فو وحدة أو فو الحزمة. foolib
, على سبيل المثال شعبية اسم حزمة.