मैं पाइप के साथ गिट उपनिर्देशिका से कैसे स्थापित कर सकता हूं?


104

मेरे पास कई फ़ोल्डर्स के साथ गिट रिपॉजिटरी है, उनमें से एक पाइप के साथ एक अजगर मॉड्यूल स्थापित है, जैसे:

repo.git/
repo.git/folder1/
repo.git/folder2/
repo.git/mymodule/
repo.git/mymodule/__init__.py
repo.git/mymodule/setup.py
repo.git/mymodule/...

अभी मुझे निम्नलिखित को स्थापित करना है:

git clone http://server/repo.git
cd repo
pip install mymodule
cd ..
rm -rf repo

क्या स्पष्ट रूप से क्लोनिंग के बिना पाइप के साथ मॉड्यूल को सीधे स्थापित करना संभव है?

मैंने कोशिश की:

pip install git+https://server/repo.git/mymodule/
pip install git+https://server/repo.git:mymodule/

लेकिन मुझे मिलता है:

IOError: [Errno 2] No such file or directory: '/tmp/pip-88tlLm-build/setup.py'

1
इस सवाल का पहले से ही जवाब दिया जा रहा है: stackoverflow.com/questions/10847764/pip-install-from-git-repo
सिंथेसाइजरटेल

1
आपके द्वारा लिंक किया गया प्रश्न गुम फाइलों के बारे में था क्योंकि कोई MANIFEST.in नहीं है। मेरा प्रश्न पाइप के साथ एक उपनिर्देशिका को स्थापित करने के तरीके के बारे में है, कोई भी फाइल गायब नहीं है क्योंकि मैं पूरे रेपो को क्लोन करके पैकेज को स्थापित कर सकता हूं।
जे। मार्टिनकोट-लेगार्दे 7

@synthesizerpatel आप जिस प्रश्न से जुड़े हैं वह अलग-अलग चीज़ों के बारे में पूछता है लेकिन शीर्षक भ्रामक था इसलिए मैंने इसे सही किया। आप अपने (मुझे लगता है) डाउनवोट को हटाने पर विचार कर सकते हैं।
पायोत्र डोब्रोगोस्ट

जवाबों:


120

इस सुविधा के बारे में एक अनुरोध है , और यह एक महीने पहले शाखा को विकसित करने के लिए विलय कर दिया गया है। सिंटैक्स निम्न है :

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

हमें शायद कुछ समय तक इंतजार करना होगा जब तक कि यह मास्टर में विलय नहीं हो जाता और वितरित किया जाता है।

अद्यतन : यह अब उपलब्ध है और https://pip.readthedocs.io/en/stable/reference/pip_install/#vcs-support पर निम्नानुसार प्रलेखित है:

उन प्रोजेक्ट्स के लिए जहां setup.py परियोजना की जड़ में नहीं है, "उपनिर्देशिका" घटक का उपयोग किया जाता है। "उपनिर्देशिका" घटक का मान प्रोजेक्ट के रूट से शुरू होने वाला एक पथ होना चाहिए जहां setup.py स्थित है।

तो अगर आपका रिपॉजिटरी लेआउट है:

- pkg_dir/
  - setup.py  # setup.py for package ``pkg``
  - some_module.py
- other_dir/
  - some_file
- some_other_file

आपको उपयोग करने की आवश्यकता होगी

pip install -e vcs+protocol://repo_url/#egg=pkg&subdirectory=pkg_dir

नोट: विंडोज पर, आपको URL को दोहरे उद्धरण चिह्नों में रखना चाहिए, या आपको एक त्रुटि मिलेगी "" उपनिर्देशिका 'को आंतरिक या बाहरी कमांड के रूप में मान्यता नहीं दी गई है "। जैसे, उपयोग:

pip install -e "vcs+protocol://repo_url#egg=pkg&subdirectory=pkg_dir"

4
मैंने अभी जाँच की और यह पाइप v1.5 का हिस्सा है, 1 जनवरी 2014 को रिलीज़ किया गया: github.com/pypa/pip/blob/develop/CHANGES.txt
tomka

20
यदि आप ubuntu का उपयोग कर रहे हैं, तो वास्तविक गिट स्थान से पहले एकल उद्धरण चिह्नों का उपयोग करना सुनिश्चित करें, अन्यथा & उपनिर्देशिका की अनदेखी की जाती है! उदाहरण के लिए: पाइप इंस्टाल -e 'git + git.repo /… '
Lin

7
बस एक हेड-अप: यह उन पैकेजों के लिए काम नहीं करता है (कम से कम पाइप v1.5.6 पर, 6+ संस्करणों के बारे में निश्चित नहीं है) जिनके प्रवेश बिंदु उपनिर्देशिका के भीतर हैं। pip install -e 'git+https://…/repo.git@branch#egg=package&subdirectory=package'पैकेज में परिणाम प्रदर्शित होने के स्थापित करने के लिए, और एक package.egg-linkफ़ाइल साइट-संकुल में डाल रही - लेकिन यह की मूल निर्देशिका के लिए अंक src/repo, नहीं करने के लिए src/repo/package, जैसा कि मैंने उम्मीद करेंगे। इसका मतलब है कि py_modulesआयात नहीं किया जा सकता है, और entry_pointsवास्तव में काम नहीं करते हैं: वे दोनों एक बढ़ाते हैं ImportError: No module named package
मार्क जी।

2
-eआवश्यक लगता है, अन्यथा pip freezeपूरे रास्ते को नहीं दिखाता है, केवल अंडा। यह pip-1.5.4
बजे

2
दूसरों के लिए टिप: आप git + https का उपयोग करने के लिए है, git + git काम नहीं करेगा, आपको घातक मिलेगा: दूरस्थ त्रुटि: रिपॉजिटरी नहीं मिली। मुमकिन है क्योंकि यह "क्वेरी" स्ट्रिंग को सही ढंग से पार्स नहीं करता है। मैंने अभी-अभी लॉग किया है: github.com/pypa/pip/issues/4898
amohr

33

यह पहले से ही में कहा गया है टिप्पणियों में से एक सही जवाब के तहत, लेकिन सिर्फ इस मुद्दे को उजागर करने के: जब लिनक्स कमांड लाइन से इस को क्रियान्वित करने के लिए, आप चाहिए बच &-वर्ण के बाद से एम्परसेंड पृष्ठभूमि में एक आदेश को चलाने के लिए कमांड लाइन कह रहा है:

git+https://git.repo/some_repo.git#egg=version_subpkg\&subdirectory=repo

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

bash: (...) command not found

1
एकल उद्धरण में url संलग्न करने से एम्परसेंड से बचने की आवश्यकता से बचने में मदद मिलेगी? मुझे पता है कि cURL में URL के साथ काम करने में मददगार है।
जोश पीक

1
यह भी ध्यान देने योग्य है: विंडोज कमांड लाइन से इसे निष्पादित करते समय, आपको URL को दोहरे उद्धरण चिह्नों में रखना होगा, या आपको एक त्रुटि मिलेगी "" उपनिर्देशिका "को आंतरिक या बाहरी कमांड के रूप में मान्यता नहीं दी गई है"। उदाहरण के लिए, पाइप इंस्टॉल करें -e "git + myurl / proj # अंडा = उप-किग्रा और उपनिर्देशिका = उपदिर " का उपयोग करें

सामान्य तौर पर, शेल स्क्रिप्ट के साथ काम करते समय, सुरक्षित पक्ष पर होने वाले तर्कों के आसपास दोहरे उद्धरण चिह्नों का उपयोग करें। अधिक सर्वोत्तम प्रथाओं के लिए देखें: shellcheck.net या github.com/koalaman/shellcheck
Erik Aronesty

2
बचना OSX में आवश्यक है (क्योंकि यह एक तरह का लिनक्स डिस्ट्रो है)
ygesher

6
शाखा-आधारित संस्थापन उपयोग के लिए:pip install git+ssh://git@github.com/org_or_username/repo.git@branch#subdirectory=path/to/dubdir
RDK
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.