आवश्यकताओं में कैसे बताएं। एक प्रत्यक्ष github स्रोत


448

मैंने कमांड का उपयोग करके एक पुस्तकालय स्थापित किया है

pip install git+git://github.com/mozilla/elasticutils.git

जो इसे सीधे जीथब भंडार से स्थापित करता है। यह ठीक काम करता है और मैं उस पर निर्भरता रखना चाहता हूं requirements.txt। मैंने इस तरह के अन्य टिकटों को देखा है, लेकिन इससे मेरी समस्या हल नहीं हुई। अगर मैंने कुछ ऐसा डाला

-f git+git://github.com/mozilla/elasticutils.git
elasticutils==0.7.dev

में requirements.txtफ़ाइल, एक pip install -r requirements.txtनिम्न उत्पादन में परिणाम:

Downloading/unpacking elasticutils==0.7.dev (from -r requirements.txt (line 20))
  Could not find a version that satisfies the requirement elasticutils==0.7.dev (from -r requirements.txt (line 20)) (from versions: )
No distributions matching the version for elasticutils==0.7.dev (from -r requirements.txt (line 20))

आवश्यकताओं फ़ाइल के प्रलेखन का उपयोग कर लिंक का उल्लेख नहीं करता git+gitप्रोटोकॉल विनिर्देशक है, तो हो सकता है यह सिर्फ समर्थित नहीं है।

क्या किसी के पास मेरी समस्या का हल है?

जवाबों:


327

"संपादन योग्य" संकुल वाक्यविन्यास का उपयोग requirements.txtविभिन्न प्रकार के VCS (git, hg, bzr, svn) से संकुल आयात करने के लिए किया जा सकता है :

-e git://github.com/mozilla/elasticutils.git#egg=elasticutils

इसके अलावा, यह विशेष रूप से प्रतिबद्ध करने के लिए इंगित करने के लिए संभव है:

-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#egg=elasticutils

3
मैंने स्थानीय रूप से इस तरह के एक संपादन योग्य संस्करण (सिंटैक्स समस्याओं के कारण, शायद) को चेकआउट करने का प्रबंधन नहीं किया और इसलिए git+gitसंस्करण (जो काम किया) का उपयोग करके समाप्त हो गया । में requirements.txtअपने संस्करण काम करता है, तो आपको बहुत बहुत धन्यवाद :)
Alfe

1
docsलिंक मेरे लिए काम नहीं कर रहा था; मैंने एक पुराने का उपयोग किया है ।
osa

42
जो मुझे समझ में नहीं आया वह यह है कि सिंटैक्स दिखाया गया है कि आवश्यकताओं में वही है, जो -ई से पहले कोई पैकेज नाम नहीं है।
ऋषि

5
"-E" जोड़ना इस बात पर निर्भर करना आवश्यक नहीं है कि आप पैकेज संपादन योग्य मोड में चाहते हैं, @qff द्वारा उत्तर देखें।
स्काई

17
-e git+git://इसके बजाय नहीं होना चाहिए -e git://? मुझे "या तो svn +, git +, hg +, या bzr +" त्रुटि संदेश के साथ एक स्थानीय परियोजना या VCS url के लिए एक पथ होना चाहिए
ब्रूस वेन

424

आम तौर पर आपकी requirements.txtफ़ाइल कुछ इस तरह दिखाई देगी:

package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...

गिथब रेपो को निर्दिष्ट करने के लिए, आपको package-name==सम्मेलन की आवश्यकता नहीं है ।

नीचे दिए गए उदाहरण package-twoएक GitHub रेपो का उपयोग कर अद्यतन करते हैं। के बीच पाठ @और #पैकेज की बारीकियों को दर्शाता है।

प्रतिबद्ध हैश निर्दिष्ट करें ( 41b95ecअद्यतन के संदर्भ में requirements.txt):

package-one==1.9.4
git+git://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1

शाखा का नाम निर्दिष्ट करें ( master):

git+git://github.com/path/to/package-two@master#egg=package-two

टैग निर्दिष्ट करें ( 0.1):

git+git://github.com/path/to/package-two@0.1#egg=package-two

रिलीज निर्दिष्ट करें ( 3.7.1):

git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two

ध्यान दें कि #egg=package-twoयहाँ एक टिप्पणी नहीं है, यह स्पष्ट रूप से पैकेज के नाम को बताना है

इस ब्लॉग पोस्ट में इस विषय पर कुछ और चर्चा है।


54
अन्य सभी उत्तरों में से, मुझे विश्वास नहीं हो रहा है कि उनमें से कोई भी केवल "सामान्य" रीकों के मिश्रण के साथ एक आवश्यकताओं की फाइल को दिखाता है जो तुलना के लिए फेंक दिया गया है। कमांड-लाइन ( -e) विकल्पों की तरह दिखने वाले मुझे बहुत फेंक दिया गया था । दोनों के मिश्रण को दिखाने के लिए धन्यवाद ताकि मैं इसे संदर्भ में रख सकूं!
हेन्डी

मेरे 3.7.1साथ git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-twoकाम करने की ओर इशारा नहीं किया। क्या मेरे लिए काम किया था git+git://github.com/path/to/package-two@3.7.1#egg=package-two
जीन पॉल

यह उत्तर बहुत मददगार था। हालांकि एक बात। उन git+git://...संकेतन ने किसी तरह मेरे लिनक्स बॉक्स पर ssh-रिश्तेदार त्रुटियों का कारण बना। इसलिए मैंने उन्हें git+https://...नोटेशन पर स्विच किया और फिर वे पूरी तरह से काम करते हैं।
रायलू

174

requirements.txtपाइप 7.0: 1 के रूप में गिट रिपॉजिटरी में एक पैकेज पर निर्भरता निर्दिष्ट करने के निम्नलिखित तरीकों की अनुमति देता है

[-e] git+git://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+https://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+ssh://git.myproject.org/SomeProject#egg=SomeProject
-e git+git@git.myproject.org:SomeProject#egg=SomeProject

गितुब के लिए जिसका अर्थ है कि आप कर सकते हैं (छोड़े गए नोटिस -e):

git+git://github.com/mozilla/elasticutils.git#egg=elasticutils

अतिरिक्त जवाब क्यों?
मैं -eअन्य उत्तरों में ध्वज से कुछ उलझन में था इसलिए यहाँ मेरा स्पष्टीकरण है:

-eया --editableध्वज का मतलब है कि पैकेज में स्थापित किया गया है <venv path>/src/SomeProjectऔर इस प्रकार में गहराई से दफन नहीं <venv path>/lib/pythonX.X/site-packages/SomeProjectयह अन्यथा में रखा जाएगा। 2

प्रलेखन


9
लेकिन ध्यान दें कि यदि आप -eअपने अगले pip freezeको छोड़ देते हैं तो इस पैकेज के लिए सही परिणाम नहीं दे सकते हैं
Maccesch

82

सबसे पहले, git+gitया git+https, किसी भी तरह से आप जानते हैं के साथ स्थापित करें । परियोजना kronokकी शाखा स्थापित करने का उदाहरण brabeion:

pip install -e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion

दूसरा, pip freeze > requirements.txtअपने में सही चीज पाने के लिए उपयोग करें requirements.txt। इस मामले में, आपको मिलेगा

-e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion-master

तीसरा, परिणाम का परीक्षण करें:

pip uninstall brabeion
pip install -r requirements.txt

4
पाइप फ्रीज़ अभी भी एक बंद, पूर्वकाल संस्करण के रूप में उपयोग किए जाने वाले पैकेज को सूचीबद्ध करता है। और प्रत्यक्ष
गीथब

4
आपको url उत्पन्न करने के लिए 'पाइप फ्रीज़' के लिए `-ई 'विकल्प का उपयोग करने की आवश्यकता है
Janusz Skonieczny

2
पाइप 9.0.1:no such option: -e
एसएस

आपका मतलब है git+https? पाठ में आप कहते हैं git+gitऔर कोड मेंgit+https
एंटनी हैचकिंस

@AntonyHatchkins ने तय किया।
osa

17

पाइप के बाद से v1.5, (1 जनवरी 2014 को जारी: CHANGELOG , PR ) आप अपने मॉड्यूल को शामिल करने के लिए गिट रेपो की एक उपनिर्देशिका भी निर्दिष्ट कर सकते हैं। वाक्य विन्यास इस तरह दिखता है:

pip install -e git+https://git.repo/some_repo.git#egg=my_subdir_pkg&subdirectory=my_subdir_pkg # install a python package from a repo subdirectory

ध्यान दें: एक पाइप मॉड्यूल लेखक के रूप में, यदि आप चाहें तो आदर्श रूप से आप अपने मॉड्यूल को अपने शीर्ष स्तर के रेपो में प्रकाशित करना चाहेंगे। फिर भी यह सुविधा कुछ पहले से मौजूद रिपोज के लिए मददगार है जिसमें सबडायरेक्टरीज में पायथन मॉड्यूल होते हैं। आप उन्हें इस तरह से स्थापित करने के लिए मजबूर हो सकते हैं यदि वे पीपीआई में भी प्रकाशित नहीं होते हैं।


1

मुझे लग रहा है कि यह pip3 (v9.0.1, उबंटू 18.04 के पैकेज मैनेजर द्वारा स्थापित किया गया है) को वास्तव में स्थापित करने के लिए मुझे बताए गए चीज़ को स्थापित करने के लिए मुश्किल है। मैं इस उत्तर को किसी के समय को बचाने के लिए पोस्ट कर रहा हूं जो इस समस्या में चलता है।

आवश्यकताओं में इसे डालना। Txt फ़ाइल विफल:

git+git://github.com/myname/myrepo.git@my-branch#egg=eggname

"विफल" होने से मेरा मतलब है कि जब उसने Git से कोड डाउनलोड किया, तो उसने कोड के मूल संस्करण को स्थापित करना समाप्त कर दिया, जैसा कि उस शाखा के रेपो में कोड के बजाय PyPi पर पाया गया था।

हालाँकि, शाखा नाम के बजाय कमिट स्थापित करना काम करता है:

git+git://github.com/myname/myrepo.git@d27d07c9e862feb939e56d0df19d5733ea7b4f4d#egg=eggname

क्या आप सुनिश्चित हैं कि आपकी शाखा भी दूरस्थ है?
अल्फ

यह एक स्थानीय प्रति की ओर इशारा नहीं कर रहा था, अगर आप यही सोच रहे हैं।
दूर खाते
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.