python सेटअप सेटअप में निर्भरता_लिंक्स को अनदेखा करता है




pip setuptools (4)

मेरे सेटअप में मेरे पास dependency_links है:

...
dependency_links = ['http://github.com/robot-republic/python-s3/tarball/master.tar.gz#egg=python-s3'],
...

लेकिन यह काम नहीं करता है। हालाँकि install_requires ठीक काम करता है। शायद सेटअप के लिए आवश्यक के रूप में गिट रेपो स्थापित करने के लिए एक और तरीका है?


कुछ मुद्दों पर कुछ नोट्स जो मुझे मिले, विशेष रूप से निजी रिपॉजिट से स्थापित करने के लिए।

पाइप और सेटपूल से स्थापित करने के कुछ सूक्ष्म अंतर हैं; लेकिन इस तरह से दोनों के लिए काम करना चाहिए।

from setuptools import setup
import os
# get deploy key from https://help.github.com/articles/git-automation-with-oauth-tokens/
github_token = os.environ['GITHUB_TOKEN']

setup(
    # ...
    install_requires='package',
    dependency_links = [
    'git+https://{github_token}@github.com/user/{package}.git/@{version}#egg={package}-0'
        .format(github_token=github_token, package=package, version=master)
        ]

नोटों की एक जोड़ी यहाँ:

  • निजी रेपो के लिए, आपको गिटहब के साथ प्रमाणित करने की आवश्यकता है; मैंने जो सबसे आसान तरीका पाया, वह यह है कि एक ऊऊथ टोकन बनाया जाए, जो कि आपके वातावरण में गिराए, और फिर उसे URL के साथ शामिल करें
  • आपको लिंक के अंत में कुछ संस्करण संख्या (यहां 0 ) शामिल करने की आवश्यकता है, भले ही PyPI पर कोई पैकेज न हो। इसके लिए वास्तविक संख्या होनी चाहिए, शब्द नहीं।
  • आपको git+ साथ प्रस्तावना करने की आवश्यकता है, यह बताने के लिए कि किसी z / / बेसबॉल पर इंगित करने के बजाय, इसे सेट करना है
  • version एक शाखा, एक टैग या एक प्रतिबद्ध हैश हो सकता है
  • यदि आपको --process-dependency-links से इंस्टॉल करना है तो आपको --process-dependency-links आपूर्ति करने की आवश्यकता है

चूंकि पाइप संस्करण 18.1 PEP 508 URL समर्थित है। इसका मतलब है कि आपको अब किसी भी निर्भर डिपेंडेंसी_लिंक की जरूरत नहीं है। आप इसके बजाय सीधे install_requires सूची में निर्भरता लिखते हैं। @Chad से उदाहरण इस तरह दिखता है:

setup(
    name='yourpackage',
    version='1.7.5',
    packages=[],
    url='',
    license='',
    author='',
    author_email='',
    description='',
    install_requires=[
        'somepackage==1.2.0',
        'repo==1.0.0 @ https://github.com/user/archive/master.zip#egg=repo-1.0.0',
        'anotherpackage==4.2.1'
    ],
)

अपना पैकेज स्थापित करने के लिए आप बस लिख सकते हैं:

pip install yourpackage

(बिना --process- निर्भरता-लिंक)


मुझे लगता है कि यह एक पुराना सवाल है, लेकिन, अगर आप अपने आप को यहां पाएं जैसे मैंने किया, तो यह मेरे लिए काम कर गया।

मुझे GitHub (pypi के साथ पंजीकृत नहीं) पर एक पैकेज मिला है जो अन्य GitHub (गैर-pypi) पैकेजों पर निर्भर करता है। मैं समय की एक विषम राशि खर्च करने के लिए यह पता लगाने की कोशिश कर रहा हूं कि इसे सही ढंग से संभालने के लिए पाइप कैसे प्राप्त करें। मैं इसमें शामिल करूँगा कि मैंने इसे यहाँ ठीक करने के लिए क्या किया।

एक आवश्यकताएँ। Txt फ़ाइल में निर्भरता लाना लिस्टिंग निर्भरता की पसंदीदा विधि है। हालाँकि, आपको सेटअप में install_requires को भी पॉप्युलेट करना होगा। यह इस स्तर पर था कि मैं पाइप के साथ एक चौराहे पर भाग गया, जिसमें गिटहब से निर्भरता स्थापित करने की इच्छा नहीं थी।

इस प्रश्न के उत्तर सहित अधिकांश स्थान, आपको सेटअप के dependency_links अनुभाग को आबाद करने के लिए बताते हैं। हालाँकि, आपको install_requires फ़ील्ड को निर्भरता_लिंक्स में संदर्भित पैकेज के नाम के साथ पॉप्युलेट करना होगा।

उदाहरण के लिए, यदि आपकी आवश्यकताओं में। निम्नलिखित में शामिल हैं।

somepackage==1.2.0
https://github.com/user/repo/tarball/master#egg=repo-1.0.0
anotherpackage==4.2.1

फिर, आपका सेटअप कॉल इस तरह दिखना चाहिए:

setup(
    name='yourpackage',
    version='1.7.5',
    packages=[],
    url='',
    license='',
    author='',
    author_email='',
    description='',
    install_requires=[
        'somepackage==1.2.0',
        'repo==1.0.0',
        'anotherpackage==4.2.1'
    ],
    dependency_links=[
        'https://github.com/user/repo/tarball/master#egg=repo-1.0.0'
    ]
)

ठीक है, तो अब हम अपने पैकेज को कॉन्फ़िगर कर चुके हैं; इसे स्थापित करना अगला काम है। यह वह जगह है जहाँ मैंने बहुत समय बिताया है। मैं यह पता नहीं लगा सका कि निर्भरता_लिंक निर्दिष्ट करने के कारण स्पष्ट रूप से कुछ नहीं हुआ। चाल यह है कि कुछ मामलों में, आपको पाइप के लिए अनुमति-सभी-बाहरी (अधिक विशिष्ट हो सकता है) ध्वज सेट करने की आवश्यकता है। उदाहरण के लिए:

pip install git+https://github.com/user/anotherrepo.git
--process-dependency-links --allow-all-external

आप कर रहे हैं और यह काम करता है!

अस्वीकरण: dependency_links और झंडे प्रक्रिया-निर्भरता-लिंक और अनुमति-सभी-बाहरी को हटा दिया जाता है, इसलिए उन्हें जल्द ही हटा दिया जाएगा। मेरे द्वारा बिताए गए समय में, मैं एक बेहतर, पसंद की गई विधि का पता नहीं लगा सका और अभी भी ठीक से कार्य कर रहा हूं।


इस उत्तर में मदद करनी चाहिए। संक्षेप में, आपको #egg=python-s3 लिए संस्करण (या "देव") निर्दिष्ट करने की आवश्यकता है ताकि यह #egg=python-s3-1.0.0

@ सेरीन की टिप्पणी के आधार पर अपडेट:

  • पिप 1.5.x में निर्भरता-लिंक प्रसंस्करण को सक्षम करने के लिए एक झंडा है: --process-dependency-links । मैंने इसका परीक्षण नहीं किया है क्योंकि मैं नीचे दिए गए बिंदु से सहमत हूं।
  • यह चर्चा इंगित करती है कि पाइप के लिए निर्भरता-लिंक का उपयोग करना एक बुरा अभ्यास है। हालांकि इस सुविधा को पदावनत करने के लिए सूचीबद्ध किया गया था, यह अब नहीं है। निजी पैकेज के लिए वैध उपयोग का मामला है।




easy-install