سؤال

تخيل أنك تريد وضع غير تافهة المستخدم سطح المكتب (لا الويب) التطبيق في بيثون.ما هي أفضل طريقة لتنظيم مجلد المشروع التسلسل الهرمي ؟

من المرغوب فيه ميزات سهولة الصيانة ، IDE-الود ملاءمة المصدر التحكم المتفرعة/دمج و سهلة جيل من تثبيت الحزم.

على وجه الخصوص:

  1. أين تضع المصدر ؟
  2. أين يمكنك بدء تشغيل التطبيق النصية ؟
  3. أين وضع IDE المشروع الغبار المتراكم تحت السرير?
  4. حيث يمكنك وضع وحدة القبول الاختبارات ؟
  5. حيث يمكنك وضع غير بيثون البيانات مثل config الملفات ؟
  6. حيث يمكنك وضع غير بيثون مصادر مثل C++ pyd/إذا الثنائية وحدات التمديد?
هل كانت مفيدة؟

المحلول

لا الكثير من المسألة.كل ما يجعلك سعيدا العمل.ليس هناك الكثير من القوانين السخيفة لأن الثعبان المشاريع يمكن أن تكون بسيطة.

  • /scripts أو /bin لهذا النوع من واجهة سطر الأوامر الاشياء
  • /tests من أجل الاختبارات الخاصة بك
  • /lib الخاص ج-اللغة المكتبات
  • /doc معظم الوثائق
  • /apidoc بالنسبة Epydoc ولدت API مستندات.

و الدليل المستوى الأعلى يمكن أن تحتوي التمهيدي ، Config و غيرها.

الخيار الصعب هو ما إذا كان أو عدم استخدام /src شجرة.الثعبان لا يملك التمييز بين /src, /lib, ، /bin مثل Java أو C.

منذ أعلى مستوى /src الدليل من قبل البعض بأنها لا معنى لها ، أعلى مستوى الدليل يمكن أن يكون على مستوى أعلى العمارة من التطبيق الخاص بك.

  • /foo
  • /bar
  • /baz

أوصي وضع كل هذا تحت "اسم من المنتج" الدليل.لذا ، إذا كنت تكتب تطبيق اسمه quux, الدليل الذي يحتوي على كل هذه الأشياء اسمه /quux.

مشروع آخر هو PYTHONPATH, ثم, ويمكن أن تشمل /path/to/quux/foo لإعادة QUUX.foo وحدة نمطية.

في حالتي منذ أن كنت تستخدم كومودو تحرير ، IDE cuft واحد .KPF الملف.أنا وضعت في الواقع أن في أعلى مستوى /quux دليل وحذفت إضافة إلى SVN.

نصائح أخرى

وفقا جان بول Calderone هو الملفات هيكل مشروع بيثون:

Project/
|-- bin/
|   |-- project
|
|-- project/
|   |-- test/
|   |   |-- __init__.py
|   |   |-- test_main.py
|   |   
|   |-- __init__.py
|   |-- main.py
|
|-- setup.py
|-- README

هذا بلوق وظيفة من قبل جان بول Calderone عادة تعطى جوابا في #الثعبان على Freenode.

الملفات هيكل مشروع بيثون

هل:

  • اسم الدليل شيء ذات الصلة إلى المشروع الخاص بك.على سبيل المثال, إذا كان المشروع الخاص بك يسمى "الملتوية" ، اسم الدليل المستوى الأعلى عن الملفات المصدر Twisted.عندما تفعل النشرات يجب أن تشمل رقم الإصدار لاحقة: Twisted-2.5.
  • إنشاء دليل Twisted/bin و وضع الملفات التنفيذية هناك, إذا كان لديك أي.لا تعطي لهم .py التمديد ، حتى لو كانوا الثعبان الملفات المصدر.لا تضع أي كود في نفوسهم إلا استيراد و استدعاء الرئيسية وظيفة محددة في مكان آخر في المشاريع الخاصة بك.(طفيف التجاعيد:منذ على ويندوز, المترجم هو اختارها امتداد الملف الخاص بك مستخدمي ويندوز في الواقع لا تريد .py التمديد.لذا عندما حزمة Windows, قد ترغب في إضافته.للأسف لا يوجد سهلة distutils خدعة أن أعرف من لأتمتة هذه العملية.معتبرا أن على POSIX على .py التمديد هو فقط البثرة ، بينما على ويندوز عدم فعلية علة ، إذا سيرباسي يشمل مستخدمي ويندوز ، قد تريد أن تختار فقط .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 أو آلية أخرى).سوف لا صحيح التعامل مع جميع الحالات و المستخدمين سوف تغضب عندما البرنامج لا يعمل في البيئة الخاصة بهم.

تحقق من المصادر المفتوحة الثعبان مشروع الطريق الصحيح.

اسمحوا لي مقتطفات مشروع تخطيط جزء من مقالة ممتازة:

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

دعونا نبدأ في الجزء العلوي.معظم المشاريع عددا من أعلى مستوى الملفات (مثل setup.py README.دكتوراه في الطب ، requirements.txt ، وما إلى ذلك).ثم هناك ثلاثة الدلائل أن كل مشروع يجب أن يكون:

  • Docs الدليل يحتوي على وثائق المشروع
  • دليل اسمه مع اسم المشروع الذي يخزن الفعلية حزمة بايثون
  • اختبار الدليل في واحد من مكانين
    • تحت حزمة الدليل الذي يحتوي رمز اختبار والموارد
    • باعتبارها تقف وحدها أعلى مستوى الدليل للحصول على شعور أفضل من كم الملفات الخاصة بك ينبغي أن تكون تنظيما ، وهنا مبسطة لقطة من تخطيط واحد من المشاريع ، المنوم:
$ pwd
~/code/sandman
$ tree
.
|- LICENSE
|- README.md
|- TODO.md
|- docs
|   |-- conf.py
|   |-- generated
|   |-- index.rst
|   |-- installation.rst
|   |-- modules.rst
|   |-- quickstart.rst
|   |-- sandman.rst
|- requirements.txt
|- sandman
|   |-- __init__.py
|   |-- exception.py
|   |-- model.py
|   |-- sandman.py
|   |-- test
|       |-- models.py
|       |-- test_sandman.py
|- setup.py

كما ترون, هناك بعض أعلى مستوى الملفات ، مستندات الدليل (ولدت فارغة الدليل حيث الهول سيتم وضع ولدت الوثائق) ، المنوم دليل ، دليل الاختبار تحت المنوم.

"بيثون التعبئة والتغليف السلطة" لديه sampleproject:

https://github.com/pypa/sampleproject

هو مشروع نموذج موجود كعامل مساعد الثعبان التعبئة والتغليف دليل المستخدم والبرنامج التعليمي على التعبئة والتغليف وتوزيع المشاريع.

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

  • أين تضع المصدر ؟

    • بالنسبة لائق المشاريع الكبيرة فمن المنطقي أن تقسيم مصدر في العديد من البيض.كل بيضة سيذهب منفصلة setuptools-تخطيط تحت PROJECT_ROOT/src/<egg_name>.
  • أين يمكنك بدء تشغيل التطبيق النصية ؟

    • الخيار المثالي هو أن يكون تطبيق البرنامج النصي لبدء التشغيل مسجلة باعتبارها entry_point في واحد من البيض.
  • أين وضع IDE المشروع الغبار المتراكم تحت السرير?

    • يعتمد على IDE.وكثير منهم إبقاء الأشياء في PROJECT_ROOT/.<something> في جذر المشروع, و هذا على ما يرام.
  • حيث يمكنك وضع وحدة القبول الاختبارات ؟

    • كل البيض يحتوي على مجموعة منفصلة من الاختبارات ، وأبقى في PROJECT_ROOT/src/<egg_name>/tests الدليل.أنا شخصيا أفضل استخدام py.test لتشغيلها.
  • حيث يمكنك وضع غير بيثون البيانات مثل config الملفات ؟

    • ذلك يعتمد.يمكن أن يكون هناك أنواع مختلفة من غير بيثون البيانات.
      • "الموارد", أيالبيانات التي يجب تعبئتها داخل البيض.هذه البيانات يذهب إلى المقابلة البيض الدليل ، في مكان ما داخل حزمة مساحة الاسم.ويمكن استخدامه عن طريق pkg_resources الحزمة.
      • "التكوين الملفات", أيغير بيثون الملفات التي تعتبر الخارجي للمشروع الملفات المصدر ، ولكن يجب أن تكون تهيئة مع بعض القيم عند تشغيل التطبيق قيد التشغيل.خلال تطوير أفضل أن تبقى هذه الملفات في PROJECT_ROOT/config.لنشر يمكن أن يكون هناك خيارات مختلفة.على ويندوز يمكن للمرء أن استخدام %APP_DATA%/<app-name>/config, على لينكس ، /etc/<app-name> أو /opt/<app-name>/config.
      • الملفات التي تم إنشاؤها, أيالملفات التي قد يتم إنشاؤها أو تعديلها من قبل التطبيق أثناء التنفيذ.فإنني أفضل الاحتفاظ بها في PROJECT_ROOT/var أثناء تطوير إطار /var خلال لينكس النشر.
  • حيث يمكنك وضع غير بيثون مصادر مثل C++ pyd/إذا الثنائية وحدات التمديد?
    • في PROJECT_ROOT/src/<egg_name>/native

الوثائق عادة ما تذهب إلى PROJECT_ROOT/doc أو PROJECT_ROOT/src/<egg_name>/doc (هذا يعتمد على ما إذا كنت الصدد بعض البيض أن تكون منفصلة المشاريع الكبيرة).بعض إعدادات إضافية سوف تكون في ملفات مثل PROJECT_ROOT/buildout.cfg و PROJECT_ROOT/setup.cfg.

في تجربتي, انها مجرد مسألة التكرار.وضع البيانات الخاصة بك ورمز أينما كنت أعتقد أنها تذهب.وهناك احتمالات, سوف يكون من الخطأ على أي حال.ولكن مرة واحدة يمكنك الحصول على فكرة أفضل عن بالضبط كيف تسير الامور لتشكيل أنت في وضع أفضل بكثير لجعل هذه الأنواع من التخمينات.

بقدر امتداد مصادر لدينا دليل التعليمات البرمجية في إطار صندوق يحتوي على دليل الثعبان دليل على مختلف لغات أخرى.شخصيا, أنا أكثر ميلا إلى محاولة وضع أي تمديد قانون في مستودع في المرة القادمة.

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

غير البيانات الثعبان هو أفضل المجمعة داخل وحدات بيثون باستخدام package_data الدعم في setuptools.شيء واحد أنا نوصي بشدة باستخدام مساحة الاسم حزم لخلق مساحات مشتركة والتي مشاريع متعددة يمكن استخدام-كثير مثل جافا اتفاقية وضع الحزم في com.yourcompany.yourproject (وأن يكون قادرا على أن يكون مشترك com.yourcompany.utils مساحة).

إعادة المتفرعة دمج, إذا كنت تستخدم جيدة بما فيه الكفاية المصدر نظام التحكم فإنه سيتم التعامل مع يدمج حتى من خلال تسمية; بازار هو جيد وخاصة في هذا.

خلافا لبعض إجابات أخرى هنا ، أنا +1 على وجود src دليل المستوى الأعلى (مع doc و test الدلائل جنبا إلى جنب).الاتفاقيات المحددة في وثائق أشجار الدليل سوف تختلف اعتمادا على ما كنت تستخدم; أبو الهول, على سبيل المثال لديها اتفاقيات التشغيل السريع التي تدعم أداة.

أرجوك النفوذ setuptools و pkg_resources;هذا يجعل من الاسهل بكثير لمشاريع أخرى تعتمد على إصدارات معينة من التعليمات البرمجية الخاصة بك (لإصدارات متعددة أن يكون في وقت واحد مع تثبيت مختلفة غير ملفات التعليمات البرمجية إذا كنت تستخدم package_data).

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