سؤال

أنا أتساءل عن الطريقة الصحيحة/الأسهل/الأكثر إثارة للتعامل مع المشاريع الفرعية التي تريد استخدامها نفس الحزمة الأساسية. لدينا حاليًا بنية ملف مثل هذا:

trunk\
    proj1\setup.py
          company_name\__init__.py + proj1's code
    proj2\setup.py
          company_name\__init__.py + proj2's code

نريد الاحتفاظ بمساحة الاسم Company_Name شائعة في جميع مشاريعنا (ربما هذا في حد ذاته غير صوتي؟) ولكن عندما يتم تثبيت Proj1 و Proj2 في وضع التطوير ، يتم كسر أول مشروع مثبت. يبدو import company_name... يتم الخلط بينه على حزمة Company_Name التي يجب البحث فيها وتستحوذ على أول/آخر/عشوائي.

كيف سيتم التعامل مع هذا عادة في مشروع بيثون أكبر؟ هل من الممكن حل ذلك باستخدام إعداد. في الجذع الذي يبني نوعًا ما من الإصدار الضخم؟ لم أجد أي معلومات ذات صلة على Google أو Stack ، لذا فإن أي معلومات حتى فقط هي موضع تقدير كبير!


تحرير: لقد حاولت للتو إضافة setup.py في المجلد الجذر مع

...    
namespace_packages = ['company_name'],
package_dir = {'company_name' : ['proj1/company_name', 'proj2/company_name']}
...

مع مناسب pkg_resources.declare_namespace(__name__) في ال __init_.py الملفات ، ولكن ./setup.py bdist_egg فقط يعطي:

خطأ في Company_Name إعداد: التوزيع لا يحتوي على وحدات أو حزم لحزمة مساحة الاسم 'Company_Name'

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

المحلول

على الرغم من أنني لا أستطيع أن أؤمن ببثني من حل ، فقد حصلت أخيرًا على التطبيقات المختلفة التي تعمل معًا بشكل جيد. كنت على المسار الصحيح مع حزم مساحة الاسم ، ولكن بدلاً من محاولة الحصول على مشروع فائق في الجذع ، أضفت namespace_packages خط في setup.py من كل مشروع فردي. أدى ذلك إلى التصرف بشكل صحيح عند تثبيته معًا ، ومشاركة company_name مساحة الاسم على النحو المقصود.

أي شخص يريد أن يتناغم على هذا هو حل Python معقول ، ما زلت مهتمًا بسماع ما إذا كانت هذه هي "الطريقة التي يتم بها". إنه على ما يرام ، لكن هذا قد يكون لأنه يحاكي نمط جافا الذي اعتدت عليه أكثر.

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