मैं कैसे सेटपूल बना सकता हूं जो एक पैकेज स्थापित करता है जो PyPI पर नहीं है?


142

मैंने अभी-अभी सेटप्टूल और वर्चुअन के साथ काम करना शुरू किया है। मेरे पैकेज में नवीनतम अजगर-गियरमैन की आवश्यकता है जो केवल गिटहब से उपलब्ध है। पायथन-गियरमैन संस्करण जो कि PyPI पर है, एक पुराना है। Github स्रोत setuptools- संगत है, अर्थात् setup.py, आदि वहाँ setuptools डाउनलोड करने और नए संस्करण को स्थापित करने के बजाय इसे PyPI पर देखने और पुराने को स्थापित करने का एक तरीका है?

FYI करें, नया अजगर-गियरमैन http://github.com/mtai/python-gearman है


1
क्या कोई कारण है कि आप वहाँ से स्रोत डाउनलोड करने और python setup.py installस्रोत निर्देशिका में उपयोग करने के बजाय सीधे एक अजगर पैकेज स्थापित करने की कोशिश कर रहे हैं ?
एंड्रयू

4
मैं चाहता हूं कि मेरा पैकेज कई मशीनों पर तैनात किया जाए और इसकी सभी निर्भरता अपने आप स्थापित हो जाए।
andrei

2
आप इसे सीधे जीथब से इंस्टॉल easy_installया उपयोग कर सकते हैं pip। लेकिन एक और उपाय भी है, क्या आपने पैकेज को PyPI से जोड़ने पर विचार किया है?
वोल्फ

2
चूंकि यह बस तैनाती के लिए है, तो इसका उपयोग क्यों नहीं किया गया buildout? इसमें रेडीमेड गिट प्लगइन्स की एक जोड़ी है।
वोल्फ

यहाँ समाधान: stackoverflow.com/a/17442663/1841871
zazabe

जवाबों:


156

कुंजी को easy_install बताना है कि पैकेज कहाँ से डाउनलोड किया जा सकता है। इस विशेष मामले में, यह url http://github.com/mtai/python-gearman/tarball/master पर पाया जा सकता है । हालाँकि, यह लिंक स्वयं काम नहीं करेगा, क्योंकि easy_install केवल URL को देखकर यह नहीं बता सकता है कि यह क्या प्राप्त करने जा रहा है।

इसके बजाय इसे http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta में बदलकर , easy_install पैकेज के नाम और इसके संस्करण की पहचान करने में सक्षम होगा।

अंतिम चरण URL को आपके पैकेज के dependency_links में जोड़ना है, जैसे:

setup(
   ...
   dependency_links = ['http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta']
)

अब, जब आपका पैकेज स्थापित किया जा रहा है, तो easy_install को पता चलेगा कि उस URL से डाउनलोड करने के लिए "गियरमैन 2.0.0बेटा" उपलब्ध है, और यदि आप "गियरमैन> = 2.0.0 गीता" निर्दिष्ट करते हैं, तो खुशी से इसे PyPI पर चुनें। आपके आश्रितों में ..

(आम तौर पर, जिस तरह से इस तरह का काम होता है, वह किसी के PyPI पेज पर लिंक को डाउनलोड करने योग्य स्रोत में शामिल करना है; इस मामले में, यदि गियरमैन पैकेज के लेखक ने उपरोक्त जैसा लिंक शामिल किया था, तो आप पहले ही सेट हो जाएंगे। आम तौर पर, लोग 'myproject-dev' के साथ विकास संस्करण को चिह्नित करते हैं और फिर लोग 'myproject> = somever, == dev' की आवश्यकता का उपयोग करते हैं, ताकि यदि कुछ या उच्चतर का पैकेज नहीं है, तो easy_install करने का प्रयास करेंगे रिलीज देखें या डाउनलोड करें।)

--process-dependency-linksउपयोग करते समय आपको निर्दिष्ट करना होगा pip। ध्यान दें कि निर्भरता लिंक प्रसंस्करण को हटा दिया गया है और भविष्य के रिलीज में हटा दिया जाएगा।


1
मैंने वही किया जो आपने सुझाया था, लेकिन जब मैं "python setup.py" विकसित करता हूं, तो यह कहता है "" dependency_links को foo.egg-info / dependency_links.txt पर लिखना ", लेकिन वास्तव में पैकेज को डाउनलोड और इंस्टॉल नहीं करता है। मैं एक setuptools- आधारित virtualenv का उपयोग कर रहा हूँ अगर वह मदद करता है।
-रेई

15
आपको install_requires = 'gearman> = 2.0.0beta' भी करना होगा; क्या आपने उसे शामिल किया?
पीजे इबी

3
यह मेरे लिए काम नहीं करता है, betaPyPI पर एक मौजूदा संस्करण में प्रत्यय के साथ , यह अभी भी परिभाषित किए गए एक के बजाय PyPI से पैकेज स्थापित करेगा dependency_links। यदि आप PyPI के साथ मौजूद उच्च संस्करण को सेट करने का प्रयास करते हैं #egg=package-version, तो सेटअप टूल एक Could not find a version that satisfies the requirementत्रुटि और PyPI पर उपलब्ध सभी संस्करणों की सूची के साथ शिकायत करेगा । ध्यान दें कि मैं अपना पैकेज बनाने की कोशिश कर रहा हूं sdist, फिर इसे स्थापित कर रहा हूं pip install http://url/to/my/generated/tar
ज़ाज़ेब

1
ठीक है, मेरा पैकेज स्थापित करने के साथ easy_install http://url/to/my/generated/tar, सब कुछ उम्मीद की तरह काम करता है ... किसी भी विचार क्यों?
ज़ाज़ेब

3
--process-dependency-linkspip19 के रूप में हटा दिया गया है ! देखें: github.com/pypa/pip/issues/6162
फ़ीनिक्स

67

आप pip install protocol+location[@tag][#egg=Dependency]पाइप का उपयोग करके सीधे स्रोत से इंस्टॉल करने के लिए प्रारूप का उपयोग कर सकते हैं ।

Git

pip install git+https://github.com/username/repo.git
pip install git+https://github.com/username/repo.git@MyTag
pip install git+https://github.com/username/repo.git@MyTag#egg=ProjectName

अस्थिर

pip install hg+https://hg.myproject.org/MyProject/

SVN

pip install svn+svn://svn.myproject.org/svn/MyProject

BzR

pip install bzr+http://bzr.myproject.org/MyProject/trunk

निम्नलिखित प्रोटोकॉल समर्थित हैं: [+git, +svn, +hg, +bzr]

संस्करण

@tag आपको जाँच करने के लिए एक विशिष्ट संस्करण / टैग निर्दिष्ट करने देता है।

#egg=name आपको यह निर्दिष्ट करने देता है कि परियोजना दूसरों के लिए निर्भरता के रूप में क्या है।

आदेश हमेशा होना चाहिए @tag#egg=name

निजी रिपोजिटरी

आप प्रोटोकॉल को बदलकर SSH ( ssh://) और एक उचित उपयोगकर्ता ( git@) जोड़कर निजी रिपॉजिटरी से भी इंस्टॉल कर सकते हैं :

git+ssh://git@github.com/username/my_private_repo

आप एक उपयोगकर्ता नाम / पासवर्ड के साथ निजी रिपॉजिटरी से भी इंस्टॉल कर सकते हैं।

git+https://<username>:<password>@github.com/<user>/<repo>.git

गितुब व्यक्तिगत OAuth टोकन बनाने की क्षमता प्रदान करता है जिसे साइकिल से चलाया जा सकता है

git+https://<oauth token>:x-oauth-basic@github.com/<user>/<repo>.git

requirements.txt

requirements.txt परियोजना निर्भरता को निर्दिष्ट करने के लिए उपयोग किया जाता है:

requirements.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

ये स्वचालित रूप से पैकेज के साथ स्थापित नहीं होते हैं और कमांड के साथ इंस्टॉल किए जाने चाहिए pip -r requirements.txt

सहित आवश्यकताओं फ़ाइलें

आवश्यकताएँ फ़ाइलें अन्य आवश्यकताओं फ़ाइलों को शामिल कर सकते हैं:

आवश्यकताओं-docs.txt

sphinx
-r requirements-dev.txt

आवश्यकताओं-dev.txt

some-dev-tool
-r requirements.txt

requirements.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

setup.py

आवश्यकताएँ फ़ाइलें setup.pyनिम्न आदेश के साथ निर्दिष्ट निर्भरताएँ स्थापित कर सकती हैं :

-e .

setup.pyऊपर के समान सिंटैक्स का उपयोग करके रिपॉजिटरी से भी स्थापित कर सकते हैं, लेकिन इस उत्तरdependency_links में वर्णित मूल्य का उपयोग करके ।

संदर्भ:

https://pip.pypa.io/en/latest/user_guide.html#installing-packages https://pip.pypa.io/en/latest/reference/pip_install.html


2
setup.py रिपॉजिटरी से स्थापित कर सकते हैं। बस 'setup.py-dependency_links' की खोज करें
TomDotTom

1
@TomDotTom Derp, मैंने भी उस उत्तर को उकेरा लेकिन किसी तरह इसे आत्मसात नहीं किया = पी मैं अपना उत्तर अपडेट करूंगा। यह बात बताने के लिए धन्यवाद! यह कुछ चीजें मैं कर रहा हूँ के साथ मदद करेंगे।
rebs

dependency_links मुझे लगता है कि हालांकि मूल्यह्रास किया जा रहा है (?) github.com/pypa/pip/issues/3939 । मुझे यह उत्तर पसंद है और लगता है कि सक्षम होने के कारण यह बेहतर है (सेटअपफ्रीड में):extras_require={'all': [repo @ git+https://github.com/username/repo.git]}
जोशिया एल।

21

के रूप में मैं सिर्फ एक ही बात करना ही था, मैं एक और तरीका है के रूप में यह करने के लिए मिल गया pipहै --process-dependency-linksमें निकालने के लिए शेड्यूल कर रहे हैं pipके अनुसार 19.0 इस टिप्पणी

pip 18.1 में निम्न सुविधा शामिल है

PEP 508 URL आवश्यकताओं को निर्भरता के रूप में उपयोग करने की अनुमति दें।

से वर्णन पीईपी 508 का, इस तरह के URL के लिए वाक्य रचना की तरह दिखता है निर्भरताएँ:

न्यूनतम URL आधारित लुकअप:

पाइप @ https://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bb3c72346a6de940a148ea686

तो अपने में setup.pyऐसा लगेगा

setup(
   ...
   install_requires = [
   ...
   'python-gearman @ https://github.com/mtai/python-gearman/archive/master.zip'
   ...
   ]
)

ध्यान दें, लिंक एक आर्काइव फ़ाइल है और इस उत्तर में बताए अनुसार रिपॉजिटरी की एक विशिष्ट रिलीज़ या शाखा भी हो सकती है । इसके अलावा, अन्य रिपॉजिटरी होस्ट के साथ काम करने के लिए उस उत्तर को देखें।

मेरे ज्ञान का सबसे अच्छा करने के लिए, pip install -I .अपनी निर्देशिका से अपने पैकेज को स्थापित करते समय निर्भरता को अपडेट करने का सबसे आसान तरीका है ।


क्या यह भी सब कुछ का pip installसमर्थन करता है, जैसे कि git URL, #subdirectory=...आदि। या क्या वे एक अलग और असंगत तरीके से उजागर किए गए अलग-अलग विशेषताओं के साथ एक नया सिंटैक्स लेकर आए थे?
18

यदि आप सेटपूल का उपयोग नहीं करते हैं और कमांड लाइन पर मैन्युअल रूप से निर्भरता का प्रबंधन करते हैं तो ऐसा लगता है जैसे आपको अभी भी @Rebs के उत्तर द्वारा वर्णित दृष्टिकोण का उपयोग करना है ।
फिल

1
बस इस बात की पुष्टि करने के लिए distutils.core.setupऔर साथ काम करता हैpip 19.1.1
shouldsee

परिणामी requirements.txt, हालांकि, के साथ संगत नहीं हैpip install -r requirments.txt
shouldsee

@shouldsee जो requirments.txtआप की बात कर रहे हैं?
फिल

6

वेनिला setuptoolsएक गिट रिपॉजिटरी से सीधे डाउनलोड करने का समर्थन नहीं करता है, लेकिन आप उस पृष्ठ से डाउनलोड स्रोत लिंक में से एक का उपयोग कर सकते हैं , जैसे:

easy_install http://github.com/mtai/python-gearman/tarball/master

तो, यह सुनिश्चित करने के लिए कि पायथन-गियरमैन का यह संस्करण किसी भी सर्वर पर स्थापित है जहां मेरा पैकेज होने जा रहा है, मुझे अपना पैकेज स्थापित करने से पहले मैन्युअल रूप से easy_install चलाना होगा?
andrei

यदि आप easy_install का उपयोग करते हैं, तो हाँ। लेकिन, जैसा कि दूसरों ने बताया है, आप स्विच कर सकते हैं pipया buildoutजिनके पास अधिक परिष्कृत आवश्यकताओं का प्रबंधन है। उदाहरण के लिए देखें: pip.openplans.org/#requirements-files
Ned

वास्तव में, आपको मैन्युअल रूप से easy_install चलाना नहीं आता है; आप बस अपने setup.py के लिए अतिरिक्त लिंक जोड़ सकते हैं। मैं विवरणों को समझाते हुए उत्तर लिखूंगा।
PJ Eby

2
जैसा कि ऊपर सेटअप मेरी टिप्पणी में उल्लेख किया गया है निर्भरता_लिंक प्रदान करता है जो आपको
gti
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.