سؤال

أنا أفكر في كيفية ترتيب نشر الثعبان التطبيق الذي سوف يكون

  1. للتنفيذ النصي الموجود في /usr/bin/ والتي سوف توفر CLI إلى وظائف تنفيذها في
  2. مكتبة تثبيت أينما الحالي حزم موقع الدليل.

الآن حاليا لدي الدليل التالي هيكل في المصادر:

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, على سبيل المثال شعبية اسم حزمة.

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