Python: PIP يقوم بتثبيت الحزم الفرعية في الجذر
-
30-09-2019 - |
سؤال
لدي مثل هذا الهيكل:
setup.py
package
__init__.py
sub_package
___init__.py
sub_package2
__init__.py
إذا قمت بتثبيت الحزمة عبر تثبيت setup.py ، فإنه يعمل كما هو موضع تقدير (عن طريق نسخ حزمة كاملة إلى حزم الموقع DIR):
site_packages
package
sub_package
sub_package2
ولكن إذا قمت بتشغيل حزمة تثبيت PIP ، فإن PIP يقوم بتثبيت كل حزمة فرعية كحزمة مستقلة:
site-packages
package
sub_package
sub_package2
كيف يمكنني تجنب ذلك؟ يمكنني استخدام find_packages () من setuptools لتحديد الحزم.
المحلول
ملاحظة: هذه الإجابة غير صالحة بعد الآن ، يتم الاحتفاظ بها فقط لأسباب تاريخية ، الإجابة الصحيحة الآن هي استخدام setuptools ، مزيد من المعلومات https://mail.python.org/pipermail/distutils-sig/2013-march/020126.html
بادئ ذي بدء ، سأوصي بإسقاط setuptools:
واستخدام أيضًا distutils (وهو آلية قياسية لتوزيع حزم بيثون) أو نشر لديك أيضا distutils2 لكنني أعتقد أنه ليس جاهزًا بعد ، وبالنسبة للمعايير الجديدة هنا هو خط دليل لكيفية كتابة setup.py.
لمشكلتك find_packages()
لا توجد في distutils وسيتعين عليك إضافة الحزمة الخاصة بك مثل هذا:
setup(name='package',
version='0.0dev1',
description='blalal',
author='me',
packages=['package', 'package.sub_package', 'package.sub_package2'])
وإذا كان لديك الكثير من الحزم والحزم الفرعية ، فسيتعين عليك إنشاء بعض التعليمات البرمجية التي تنشئ قائمة الحزم هنا هو مثال من مصدر Django.
أعتقد أن استخدام distutils يمكن أن يساعدك في مشكلتك، وآمل أن يساعد هذا :)