هل يمكن أن تعتمد حزمة Python على مراجعة تحكم محددة من حزمة Python أخرى؟
-
21-09-2019 - |
سؤال
يتم كسر بعض حزم بيثون المفيدة على PYPI ، والنسخة الوحيدة المقبولة هي مراجعة خاصة في نظام التحكم في المراجعة. يمكن التعبير عن ذلك في setup.py
على سبيل المثال
requires = 'svn://example.org/useful.package/trunk@1234'
?
المحلول
تحتاج إلى القيام شيئين. أولاً ، طلب الإصدار الدقيق الذي تريده ، على سبيل المثال:
install_requires = "useful.package==1.9dev-r1234"
ثم قم بتضمين أ dependency_links
تحديد تحديد مكان العثور عليه:
dependency_links = ["svn://example.org/useful.package/trunk@1234#egg=useful.package-1.9dev-r1234"]
لاحظ أن الإصدار #egg=
جزء من dependency_links
يجب أن يكون عنوان URL بالضبط تطابق ما حددته في install_requires
; ؛ هذا هو ما يربط القطعتين معًا.
ما يحدث هو أن Setuptools يرى علامة #EGG على الرابط ويحفظ عنوان URL كعنوان URL للتنزيل المتاح لهذا الإصدار الدقيق من الحزمة. ثم ، عندما تحاول حل هذا المتطلبات لاحقًا ، يجب عليه تنزيل عنوان URL الدقيق SVN.
(لاحظ ، مع ذلك ، لهذا إلى هل حقا العمل ، يجب أن تقوم مراجعة SVN المستهدفة ببناء بيضة بهذا الاسم والإصدار. خلاف ذلك ، سوف تفشل تبعية في وقت التشغيل! لذلك ، هذا يعمل حقًا فقط إذا كانت الحزمة التي تعتمد عليها تستخدم علامات مراجعة SVN في أرقام إصدار البناء الافتراضية الخاصة بها.)
نصائح أخرى
إذا كنت تحتاج حقًا إلى إصدار غامض من حزمة أخرى ، وليس هناك طريقة للقيام بها مع الإصدارات الأخرى ، فقد ترغب في توزيع هذا الإصدار من الحزمة ببساطة. إذا لزم الأمر ، ضعها في مساحة الاسم الخاصة بك للتأكد من أن الإصدار الخاص بك هو الذي يتم استخدامه.
لم أحسب كيفية الرجوع إلى هذا من setup.py
لكن pip
يمكن التحقق من مراجعات محددة لحزم بيثون مع ملف متطلبات بسيط. مع ملف متطلبات يسمى requires.txt
, pip install -r requires.txt
سيتم تثبيت جميع الحزم المدرجة في هذا الملف (وتبعياتها).
هنا جزء من ملف متطلباتي. الخطوط تبدأ مع -e
تحقق من مراجعات محددة للحزم من التحكم في الإصدار (GIT ، SVN ، أو Mercurial) ، بما في ذلك مشروعي ، وتثبيتها في شكل قابل للتحرير. pip freeze
يسرد جميع الحزم المثبتة في هذا التنسيق.
requires.txt
:
-e hg+file:///home/me/my-private-project#egg=myproject
-e hg+http://bitbucket.org/ianb/webob@tip#egg=WebOb
-e svn+http://svn.sqlalchemy.org/sqlalchemy/trunk@6638#egg=SQLAlchemy
-e svn+http://svn.zope.org/repos/main/z3c.saconfig/trunk@106508#egg=z3c.saconfig
## The following requirements were added by pip --freeze:
APScheduler==1.01
simplejson==2.0.9
... (many more)
يمكنك إصدار حزم من الإصدارات المحددة ، ولكن عليك توزيعها معًا. لا توجد طريقة لتنزيلها تلقائيًا باستخدام Python القياسي.
ومع ذلك ، يمكنك استخدام Buildout وإنشاء buildout.cfg مما يجعل من الممكن تكرار البيئة. يمكنه التحقق من مراجعات محددة وتثبيتها إذا كنت تستخدم ملحقات مثل Mr.Developer.
http://pypi.python.org/pypi/zc.buildout http://pypi.python.org/pypi/mr.developer