2013-08-02 7 views
36

मैं एक परियोजना के लिए setup.py फ़ाइल बना रहा हूं जो निजी गिटहब भंडारों पर निर्भर करता है। क्योंकि बाद प्रति this जवाब install_requires और dependency_links तर्क का समर्थन नहीं करतापायथन सेटअपtools: मैं install_requires के तहत एक निजी भंडार कैसे सूचीबद्ध कर सकता हूं?

from setuptools import setup 
setup(name='my_project', 
    ..., 
    install_requires=[ 
     'public_package', 
     'other_public_package', 
     'private_repo_1', 
     'private_repo_2', 
    ], 
    dependency_links=[ 
     'https://github.com/my_account/private_repo_1/master/tarball/', 
     'https://github.com/my_account/private_repo_2/master/tarball/', 
    ], 
    ..., 
) 

मैं setuptools बजाय distutils उपयोग कर रहा हूँ: फ़ाइल के प्रासंगिक भागों इस तरह दिखेगा।

उपर्युक्त सेटअप फ़ाइल 404 त्रुटि के साथ निजी रिपोज़ तक पहुंचने में विफल रहता है - जिसकी अपेक्षा की जा सकती है क्योंकि गिटहब एक निजी भंडार के लिए अनधिकृत अनुरोधों के लिए 404 लौटाता है। हालांकि, मैं यह नहीं समझ सकता कि setuptools प्रमाणीकरण कैसे करें।

ये कुछ चीजें हैं मैं कोशिश की है इस प्रकार हैं:

  1. उपयोग git+ssh:// बजाय dependency_links में https:// अगर pip साथ रेपो स्थापित करने मैं होगा के रूप में। यह विफल रहता है क्योंकि setuptools इस प्रोटोकॉल को पहचान नहीं करता है ("अज्ञात यूआरएल प्रकार: गिट + एसएसएच"), हालांकि distribute documentation कहता है कि इसे करना चाहिए। Ditto git+https और git+http

  2. https://<username>:<password>@github.com/... - अभी भी एक 404. मिल (इस विधि curl या wget कमांड लाइन से साथ काम नहीं करता है या तो -। हालांकि curl -u <username> <repo_url> -O <output_file_name> काम करता है)

  3. उन्नयन setuptools (0.9.7) और virtualenv (1.10) नवीनतम संस्करणों में। this overview वितरित करने के बाद भी वितरण स्थापित करने का प्रयास किया गया है, यह कहता है कि इसे setuptools में वापस विलय कर दिया गया था। किसी भी तरह से, कोई पासा नहीं।

वर्तमान में मैं सिर्फ setup.py प्रिंट आउट एक चेतावनी है कि निजी रेपोस अलग से डाउनलोड किया जाना चाहिए है। यह आदर्श रूप से आदर्श से कम है। मुझे लगता है कि कुछ स्पष्ट है कि मैं याद कर रहा हूं, लेकिन यह नहीं सोच सकता कि यह क्या हो सकता है। :)

डुप्लिकेट-आईएसएच प्रश्न here कोई जवाब नहीं है।

उत्तर

1

संपादित करें: यह केवल सार्वजनिक जिथब भंडारों के साथ काम करता है, टिप्पणियां देखें।

dependency_links=[ 
    'https://github.com/my_account/private_repo_1/tarball/master#egg=private_repo_1', 
    'https://github.com/my_account/private_repo_2/tarball/master#egg=private_repo_2', 
], 

ऊपर वाक्यविन्यास setuptools 1.0 के साथ मेरे लिए काम करता प्रतीत होता है। इस समय कम से कम वीसीएस निर्भरताओं को "# अंडा = project_name-version" जोड़ने का वाक्यविन्यास आपके द्वारा दिए गए लिंक में distribute documentation पर लिखा गया है।

+0

में निर्दिष्ट कर रहे हैं मैं अभी भी एक ही 404 त्रुटि मिली। क्या आपके मामले में प्रतिनिधि निजी हैं? मुझे # अंडे = वाक्यविन्यास से अवगत है लेकिन यह नहीं पता कि यह प्रमाणीकरण को प्रभावित करता है। –

+0

क्षमा करें, यह निश्चित रूप से एक सार्वजनिक रेपो परियोजना थी। यदि संभवतः https // : @ @ tarball URL gitubs निजी भंडारों के साथ काम नहीं करते हैं, तो यह प्रश्न यह भी इंगित करता है कि यह प्रश्न इंगित करता है: [होने-परेशानी-डाउनलोडिंग-गिट- संग्रह-टैरबॉल-से-प्राइवेट-रेपो] (http://stackoverflow.com/questions/10046027/having-rourouble-downloading-git-archive-tarballs-from-private-repo) – wor

+0

आप setuptools के विकास संस्करण को भी आजमा सकते हैं और/या कोड की जांच करें। प्रासंगिक कोड प्रतीत होता है: [package_index: fetch_distribution(): 534] (https://bitbucket.org/pypa/setuptools/src/9f475ec7aedd04ccf89483d8575808d30e31ab51/setuptools/package_index.py?at = default # cl-534) [package_index.py:_download_url():736 ](https://bitbucket.org/pypa/setuptools/src/9f475ec7aedd04ccf89483d8575808d30e31ab51/setuptools/package_index.py?at=default#cl-736) – wor

30

यहाँ क्या मेरे लिए काम किया है:

install_requires=[ 
     'private_package_name==1.1', 
    ], 
    dependency_links=[ 
     'git+ssh://[email protected]/username/private_repo.git#egg=private_package_name-1.1', 
    ] 

नोट आप अंडा नाम पर संस्करण संख्या होनी चाहिए, अन्यथा वह कहेंगे कि यह पैकेज नहीं मिल रहा।

+3

हाय vadimg - सेटअपtools/वितरित का कौन सा संस्करण आप उपयोग कर रहे हैं? मुझे 0.7.3 (नवीनतम संस्करण) वितरित करते हुए "अज्ञात यूआरएल प्रकार: गिट + एसएसएच" मिलता है। –

+1

यह 3 साल बाद मेरे लिए काम नहीं करता ... मिला: एक संस्करण नहीं मिला जो – jsmedmar

+5

की आवश्यकता को पूरा करता है 28 अक्टूबर, 2016 तक, यह दृष्टिकोण – Max

3

सार्वजनिक भंडारों के लिए, मेरे लिए जिथब कार्यों से संग्रह URL का उपयोग करना। जैसे

dependency_links = [ 
    'https://github.com/username/reponame/archive/master.zip#egg=eggname-version', 
] 
1

मैं एक (hacky) वैकल्पिक हल मिल गया:

#!/usr/bin/env python 

from setuptools import setup 
import os 

os.system('pip install git+https://github-private.corp.com/user/[email protected]') 

setup(name='original-name' 
    , ... 
    , install_requires=['repo']) 

मैं समझता हूँ कि वहाँ एक सेटअप स्क्रिप्ट में एक सिस्टम कॉल होने के साथ नैतिक मुद्दों हैं कि, लेकिन मैं एक और तरीका है करने के लिए सोच भी नहीं सकते इस।

+0

हां यह हमारे लिए निम्न के कारण एक बदसूरत कामकाज भी था: https://github.com/pypa/pip/issues/2822 – Tommy

+0

यह एकमात्र तरीका है जिसे मैं इसे काम करने के लिए प्राप्त कर सकता हूं, हालांकि मैं 'आयात पाइप के साथ गया '। न तो @ वादिम का जवाब या [पीपीए/पीआईपी में यह सुझाव] (https://github.com/pypa/pip/issues/2124) काम किया। – gens

+0

यह एक निर्भरता स्थापित करेगा भले ही इंस्टॉलेशन से संबंधित कुछ चल रहा हो जैसे 'python setup.py --version'। – WhyNotHugo

3

मुझे इस पर कोई अच्छा दस्तावेज नहीं मिला, लेकिन मुख्य रूप से परीक्षण & त्रुटि के माध्यम से समाधान में आया। इसके अलावा, पीआईपी & सेटअपटॉल्स से कुछ सूक्ष्म मतभेद हैं; लेकिन इस तरह दोनों के लिए काम करना चाहिए।

गिटहब (वर्तमान में, अगस्त 2016 तक) निजी रिपोज़ के ज़िप/टैरबॉल प्राप्त करने का एक आसान तरीका प्रदान नहीं करता है। तो तुम setuptools बात करने के लिए setuptools है कि आप एक Git रेपो की ओर इशारा करते रहे हैं बताने के लिए की जरूरत है:

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) 
     ] 

कुछ नोट यहाँ:

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

मुझे टैग या शाखा संदेश नहीं मिल रहा है। इस तथ्य के बावजूद कि मैं जिस निजी रिपो को क्लोन करने का प्रयास कर रहा हूं उसके पास एक टैग है। – trendsetter37

+0

@ trendsetter37 – Maximilian

+1

का उपयोग करके आप किस कमांड का उपयोग कर रहे हैं यह पता लगाया गया कि समस्या क्या थी। इस टैग में 'v' ने github में इसके लिए प्रीपेड किया था। तो मुझे अपनी setup.py स्क्रिप्ट में '1.1.0' के बजाय' v1.1.0' का उपयोग करने की आवश्यकता थी। – trendsetter37

0

हमारे परिदृश्य के लिए यह काम: एक निजी रेपो में

  1. पैकेज GitHub पर है
  2. हम साइट-पैकेज में इसे स्थापित करने
  3. पिप उपयोग करने के लिए -r requirements.txt
  4. पिप उपयोग करने के लिए -e reposdir स्थापित सक्षम किया जा रहा स्थापित सक्षम किया जा रहा (-e साथ ./src में) चाहते हैं (या से GitHub), जहां निर्भरता केवल requirements.txt

https://github.com/pypa/pip/issues/3610#issuecomment-356687173

संबंधित मुद्दे