पाइप का उपयोग करके एक अलग निर्देशिका में पायथन पैकेज स्थापित करें?


434

मुझे पता है कि स्पष्ट उत्तर virtualenv और virtualenvwrapper का उपयोग करना है, लेकिन विभिन्न कारणों से मैं ऐसा नहीं कर सकता / नहीं करना चाहती।

तो मैं कमांड को कैसे संशोधित करूं

pip install package_name

बनाने के लिए pipपैकेज डिफ़ॉल्ट के अलावा अन्य कहीं स्थापित site-packages?



2
अब प्रश्न संख्या दो: जब आप पहले से ही कस्टम निर्देशिका में स्थापित कर रहे हैं, तो pipगैर-कस्टम निर्देशिका से पुराने संस्करण को निकालने का प्रयास कैसे न करें। उदाहरण के लिए - एक सिस्टम-वाइड एक, जहां आपके पास कोई लिखने की अनुमति नहीं है। अब तक मैंने केवल इसे ही खींचा है easy_install...
टॉमस गैंडर

2
@TomaszGandor मुझे लगता है कि --ignore-installedविकल्प का उपयोग करके पाइप को पहले से स्थापित पैकेजों की स्थापना रद्द करने की कोशिश से रोकना चाहिए।
पायोत्र डोब्रोगोस्ट

क्षमा करें, मैं पाइप के साथ नया हूं, लेकिन क्या आपका प्रश्न "पूछने के रूप में ही है कि कैसे पाई को अजगर के एक अलग संस्करण में स्थापित किया जाए"? मेरे पास ३.४ और ३.५ हैं, लेकिन मैं चाहता हूं कि मेरी पाइप स्थापना ३.५ पर जाए।
चार्ली पार्कर

@ चार्ली नोप, अलग सवाल। मुझे आपके इंस्टॉलेशन / इरादों के बारे में पर्याप्त जानकारी नहीं है, लेकिन आम तौर पर मैं शायद virtualenvwrapper का उपयोग करता हूं और कुछ के साथ एक आभासी वातावरण mkvirtualenv --python=/usr/bin/python3.5 env_name
बनाता हूं

जवाबों:


334

उपयोग:

pip install --install-option="--prefix=$PREFIX_PATH" package_name

आप --ignore-installedइस नई उपसर्ग का उपयोग करके सभी निर्भरताओं को फिर से स्थापित करने के लिए मजबूर करने के लिए उपयोग करना चाह सकते हैं । आपके द्वारा उपयोग किए जा सकने वाले --install-optionकिसी भी विकल्प को जोड़ने के लिए आप कई बार उपयोग कर सकते हैं python setup.py install(--prefix संभवतः वह है जो आप चाहते हैं, लेकिन एक गुच्छा अधिक विकल्प हैं जिनका आप उपयोग कर सकते हैं)।


5
यदि आप ऐसा करते हैं, तो क्या pip freezeवैकल्पिक निर्देशिका को देखने का कोई तरीका है ?
रस

7
पाइप फ्रीज मार्ग पर दिखता है, इसलिए यदि आपको ऐसा कुछ लगता है PYTHONPATH=$PREFIX_PATH/lib/python2.6/site-packages pip freezeतो उन्हें देखना चाहिए।
इयान बेकिंग

4
का उपयोग करते हुए --prefix=$PREFIX_PATHस्थापना निर्देशिका का पूर्ण नियंत्रण करने की अनुमति नहीं लगती है क्योंकि इसमें सिस्टम विशिष्ट प्रत्यय है ( \Lib\site-packagesउदाहरण के लिए विंडोज पर)। क्या विशिष्ट निर्देशिका निर्दिष्ट करने का कोई तरीका है?
पिओट्र डोब्रोगोस्ट

1
@Potr: हाँ वहाँ मेरा जवाब है। '--Prefix' का उपयोग करना थोड़ा कठिन है, लेकिन अगर आप अपने शुद्ध अजगर को /usr/lib/pythonX.Y/site-packages के बजाय /usr/local/pyib/pythonX.Y/site- के तहत जाना चाहते हैं तो अच्छा काम करता है संकुल।
एंथन

80
4 साल पहले एक बुरा जवाब नहीं है, लेकिन - thegetget विकल्प अब मौजूद है।
Tritium21

545

--Target स्विच बात आप के लिए देख रहे हैं:

pip install --target=d:\somewhere\other\than\the\default package_name

लेकिन आपको अभी भी उस स्थान से वास्तव में उनका उपयोग करने के लिए जोड़ना d:\somewhere\other\than\the\defaultहोगा PYTHONPATH

-t, --target <dir> <dir> में
पैकेज स्थापित करें। डिफ़ॉल्ट रूप से यह मौजूदा फ़ाइलों / फ़ोल्डरों को <dir> में प्रतिस्थापित नहीं करेगा।
नए संस्करणों के साथ मौजूदा पैकेज को <dir> में बदलने के लिए --upgrad का उपयोग करें।


लक्ष्य स्विच उपलब्ध नहीं होने पर अपग्रेड पाइप:

लिनक्स या OS X पर:

pip install -U pip

विंडोज पर (यह एक समस्या के आसपास काम करता है ):

python -m pip install -U pip

8
@ डन रन pip install --upgrade pip!
r3m0t

16
यह सही उत्तर है, यह स्वीकार किए गए उत्तर के बाद बस विकल्प काफी जोड़ा गया था।
०४ पर

5
--install-option="--prefix=$PREFIX_PATH"@Ian Bicking और --target=$PATHविकल्प द्वारा वर्णित अंतर क्या है ?
हिबॉ57

6
targetएक पाइप विकल्प है, और आप जो कुछ भी डालते हैं, install-optionउस पर पारित किया जाएगा setup.py install command। मूल रूप targetसे कस्टम साइट-संकुल स्थान है।
Janusz Skonieczny

10
उपयोग करने के --targetपरिणामस्वरूप आंशिक स्थापना हो सकती है, क्योंकि यह निर्दिष्ट उपसर्ग में स्क्रिप्ट / डेटा फ़ाइलों सहित कोई भी स्थापित नहीं करेगा। यह गुजर की तरह लगता है --prefixके साथ --install-optionहै ही उचित तरीके से पूरा नियंत्रण है के लिए खत्म हो प्रयुक्त प्रतिष्ठानों लगा दें।
केनेथ होस्ट

73

--targetविकल्प या विकल्प के बजाय --install-options, मैंने पाया है कि निम्नलिखित अच्छी तरह से काम करता है (बग पर चर्चा से संबंधित इस बारे में https://github.com/pypa/pip/issues/446 पर ):

PYTHONUSERBASE=/path/to/install/to pip install --user

(या PYTHONUSERBASEकमांड का उपयोग करके कमांड चलाने से पहले अपने वातावरण में निर्देशिका सेट करें export PYTHONUSERBASE=/path/to/install/to)

यह बहुत उपयोगी का उपयोग करता है --userविकल्प लेकिन यह बताता है बनाने के लिए bin, lib, shareऔर अन्य निर्देशिकाओं आप एक कस्टम उपसर्ग के तहत उम्मीद के बजाय चाहते हैं$HOME/.local

फिर आप इसे अपने लिए जोड़ सकते हैं PATH,PYTHONPATH आप एक सामान्य स्थापना निर्देशिका के रूप में और अन्य चर।

ध्यान दें कि आप भी निर्दिष्ट करने के लिए आवश्यकता हो सकती है --upgradeऔर --ignore-installedविकल्प किसी भी संकुल जिस पर इस पर निर्भर करता है नए संस्करण की आवश्यकता होती है में स्थापित किया जा सकता है अगर PYTHONUSERBASEनिर्देशिका, सिस्टम-प्रदान की संस्करणों ओवरराइड करने के लिए।

एक पूर्ण उदाहरण:

PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy

.. scipyऔर numpyएक निर्देशिका में सबसे हाल के संस्करणों को स्थापित और पैकेज करें जिसे आप फिर अपने PYTHONPATHपसंद में शामिल कर सकते हैं (इस उदाहरण के लिए बैश का उपयोग करके और सेंटोस 6 पर अजगर 2.6 के लिए):

export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH
export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH

Virtualenv का उपयोग करना अभी भी एक बेहतर और बेहतर समाधान है!


4
यह ट्रैविस सीआई के साथ डॉकटर कंटेनरों पर चल रहा है जबकि - स्थापना-विकल्प = "- उपसर्ग = $ PREFIX_PATH" समाधान में नहीं था।
32bits

1
Noobie सवाल, /binफ़ोल्डर पाइप कितना महत्वपूर्ण है , --userइसे बनाता है --PREFIXजबकि --targetऐसा नहीं करता है।
योनातन

1
यदि पैकेज वैश्विक पायथन में स्थापित किया गया है, तो --ignore-installedइसकी आवश्यकता है।
जॉर्ज सोवतोव

1
यह विकल्प --editableस्थानीय इंस्टाल के साथ भी संगत है ।
mdh

1
यह विकल्प किसी अन्य गैर-रूट उपयोगकर्ता के लिए सुपरयूज़र के रूप में संकुल को स्थापित करने के लिए काम आता है su(उदाहरण के लिए कंटेनर में समस्याग्रस्त हो सकता है)।
mdh

43

पायथन पैकेज को स्थापित करना अक्सर केवल कुछ शुद्ध पायथन फ़ाइलों को शामिल करता है। यदि पैकेज में डेटा, स्क्रिप्ट और या निष्पादन योग्य शामिल हैं, तो ये प्योर पायथन फाइलों से अलग-अलग निर्देशिकाओं में स्थापित किए जाते हैं।

मान लें कि आपके पैकेज में कोई डेटा / स्क्रिप्ट / निष्पादन योग्य नहीं है, और आप चाहते हैं कि आपकी पायथन फाइलें /python/packages/package_name(और कुछ उपनिर्देशिका /python/packagesका उपयोग करते समय नीचे कुछ स्तरों पर नहीं --prefix) जाएं, तो आप एक समय कमांड का उपयोग कर सकते हैं:

pip install --install-option="--install-purelib=/python/packages" package_name

यदि आप अपने पैकेजों के सभी (या अधिकांश) चाहते हैं कि आप वहां जा सकें, तो आप ~/.pip/pip.confइसमें शामिल होने के लिए अपना संपादन कर सकते हैं:

[install]
install-option=--install-purelib=/python/packages

इस तरह आप इसे बार-बार निर्दिष्ट करने के बारे में नहीं भूल सकते।

पैकेज में शामिल कोई भी excecutables / डेटा / स्क्रिप्ट अभी भी अपने डिफ़ॉल्ट स्थानों पर जाएंगे जब तक कि आप अतिरिक्त इंस्टॉलेशन विकल्प ( --prefix/ --install-data/ --install-scripts, इत्यादि) निर्दिष्ट नहीं करते हैं , विवरण के लिए कस्टम इंस्टॉलेशन विकल्प देखें)।


1
कॉन्फ़िगरेशन फ़ाइल के लिए एक बड़ा प्लस। मैं व्यक्तिगत रूप से --prefixवहां निर्दिष्ट करता हूं, क्योंकि मेरे पास घर की निर्देशिका में एक साझा सर्वर पर "स्थानीय" निर्देशिका है, और easy_installइससे पहले कि मैं चला जाता था उपसर्ग के रूप में इसका उपयोग किया जाता था pip। सिस्टम $PATHऔर $PYTHONPATHपहले कॉन्फ़िगर किया गया था। इसके बजाय install-option=--install-purelib=/blahयह नया target=/blahविकल्प / स्विच है। यह अच्छा भी है, लेकिन कभी-कभी आपको केवल एक प्रतिस्थापन की आवश्यकता होती है --prefix, जिसका आप उपयोग करेंगे setup.pyया easy_install
टॉमस गैंडर

30

एक पुस्तकालय स्थापित करने के लिए, जहां मैं चाहता था, मैं उस स्थान पर नेविगेट करता हूं जहां मैं उस टर्मिनल के साथ निर्देशिका चाहता था

pip install mylibraryName -t . 

तर्क जो मैंने इस पृष्ठ से लिया है: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download


11
-tके लिए आशुलिपि है--target
जोनाथन

यह एकमात्र समाधान था जिसने मेरे लिए काम किया। (विंडोज 7)
कॉलिबन

18

किसी को भी -t विकल्प का उल्लेख नहीं लगता है, लेकिन यह सबसे आसान है:

pip install -t <direct directory> <package>

8
-tविकल्प के लघु संस्करण है --targetविकल्प जो एक और उत्तर (में वर्णित किया गया है stackoverflow.com/a/19404371/594053 ) :)
MattiSG

14

बस @Ian Bicking के जवाब में एक बिंदु जोड़ें:

--userस्थापित निर्देशिका को निर्दिष्ट करने के लिए विकल्प का उपयोग करना भी काम करता है यदि कोई दूरस्थ सर्वर पर किसी के होम निर्देशिका में (sudo उपयोगकर्ता अधिकार के बिना) कुछ पायथन पैकेज स्थापित करना चाहता है।

उदाहरण के लिए,

pip install --user python-memcached

कमांड पैकेज को आपके PYTHONPATH में सूचीबद्ध निर्देशिकाओं में से एक में स्थापित करेगा।


14

Python3.5 और पाइप 9.0.3 के साथ इन विकल्पों का परीक्षण किया:

पाइप स्थापित करें --target / myfolder [संकुल]

/ Myfolder के तहत निर्भरता सहित सभी पैकेज स्थापित करता है। इस बात को ध्यान में नहीं रखता है कि निर्भर पैकेज पहले से ही पायथन में कहीं और स्थापित हैं। आपको / myfolder / [package_name] से पैकेज मिलेंगे। यदि आपके पास कई पायथन संस्करण हैं, तो यह इसे ध्यान में नहीं रखता है (पैकेज फ़ोल्डर नाम में कोई पायथन संस्करण नहीं है)।

पाइप स्थापित - उपसर्ग / myfolder [संकुल]

चेक पहले से स्थापित निर्भरताएं हैं। /Myfolder/lib/python3.5/site-packages/ Ispackages] में पैकेज स्थापित करेगा

पाइप स्थापित करें --root / myfolder [संकुल]

जाँच निर्भरताएँ जैसे --prefix लेकिन install स्थान /myfolder/usr/local/lib/python3.5/site-packages/ Ispackage_name] होगा।

पाइप स्थापित करें --user [संकुल]

$ HOME में पैकेज स्थापित करेंगे: /home/ IsUSERades/.local/lib/python3.5/site-packages पायथन इस से स्वचालित रूप से खोज करता है। इसलिए पथ को आपको अपने PYONONPATH पर रखने की आवश्यकता नहीं है।

=> ज्यादातर मामलों में --user उपयोग करने के लिए सबसे अच्छा विकल्प है। यदि किसी कारण से होम फोल्डर का उपयोग नहीं किया जा सकता है तो --prefix।


पायथन 2.7.16 के तहत चल रहा है, --target (या --prefix) Jinja2-2.10.1.dist- जानकारी / उदाहरण के लिए स्थापित करता है, जबकि इंस्टॉल - इंस्टॉलेशन-ऑप्शन = "- उपसर्ग Jinja2-2.10.1-pf2 स्थापित करता है .7.egg-info /, जो कि मैं वास्तव में चाहता था
ग्रेग

13

pip(8 या बाद के) के नए संस्करण सीधे --prefixविकल्प का उपयोग कर सकते हैं :

pip install --prefix=$PREFIX_PATH package_name

जहाँ $PREFIX_PATHस्थापना उपसर्ग है जहाँ lib, bin और अन्य शीर्ष-स्तरीय फ़ोल्डर रखे जाते हैं।



4

पहले से ही अच्छी सलाह के लिए जोड़ने के लिए, जब मैं IPython स्थापित करने के लिए एक समस्या थी जब मेरे पास लिखने की अनुमति नहीं थी/usr/local

पाइप इसकी स्थापना करने के लिए डिस्टुटिल्स का उपयोग करता है और यह धागा चर्चा करता है कि यह समस्या का कारण कैसे बन सकता है क्योंकि यह sys.prefixसेटिंग पर निर्भर करता है ।

मेरा मुद्दा तब हुआ जब IPython install ने परमिशन से वंचित '/ usr / local / share / man / man1' को लिखने की कोशिश की । स्थापित करने में विफल होने के कारण यह बिन निर्देशिका में IPython फ़ाइलों को लिखने के लिए प्रतीत नहीं हुआ।

"--User" का उपयोग करके काम किया और फाइलें ~ / .local को लिखी गईं। $ PATH में ~ / .local / bin को जोड़ने का मतलब है कि मैं वहां से "ipython" का उपयोग कर सकता हूं।

हालाँकि मैं इसे कई उपयोगकर्ताओं के लिए स्थापित करने का प्रयास कर रहा हूं और /usr/local/lib/python2.7निर्देशिका को लिखित अनुमति दे दी गई है । मैंने वहां "बिन" निर्देशिका बनाई और डिस्टल्यूट के लिए निर्देश निर्धारित किए:

vim ~/.pydistutils.cfg

[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin

तब ( -Iपिछली विफलताओं / .local इंस्टॉल के बावजूद इंस्टॉल को बाध्य करने के लिए उपयोग किया जाता है):

pip install -I ipython

तब मैं जोड़ा /usr/local/lib/python2.7/binकरने के लिए $PATH

मुझे लगा कि मैं इसे किसी अन्य मशीन में समान मुद्दों के मामले में शामिल करूंगा, जिनके पास sudo की पहुंच नहीं है।


2

यदि आप अजगर के साथ काढ़ा का उपयोग कर रहे हैं, तो दुर्भाग्य से, बहुत सीमित विकल्पों के साथ पाइप / पिप 3 जहाजों। जैसा कि ऊपर उल्लेख किया गया है - आपके पास - स्थापना-विकल्प, - गैजेट, - विकल्प नहीं हैं।

पाइप इंस्टॉल पर ध्यान दें --user पीव के
लिए सामान्य पाइप इंस्टॉल --user अक्षम है। यह डिस्टुटिल्स में एक बग के कारण है, क्योंकि होमब्रेव डिस्टुटिल्स लिखते हैं। एफजी जो पैकेज उपसर्ग सेट करता है। संभावित वर्कअराउंड (जो निष्पादन योग्य स्क्रिप्ट को ~ / लाइब्रेरी / पायथन / / / बिन में रखता है) है: python -m pip install --user --install-option="--prefix=" <package-name>

आपको यह पंक्ति बहुत बोझिल लग सकती है। मेरा सुझाव है कि प्रबंधन के लिए pyenv का उपयोग करें। यदि आप उपयोग कर रहे हैं

brew upgrade python python3

विडंबना यह है कि आप वास्तव में डाउनग्रेड पाइप की कार्यक्षमता हैं।

(मैं इस जवाब को पोस्ट करता हूं, क्योंकि मेरे मैक ओएसएक्स में पाइप में - ऑर्टगेट विकल्प नहीं है, और मैंने इसे ठीक करने में घंटों बिताए हैं)


एक स्पष्ट उपसर्ग के साथ इसका जवाब है, और ignore-installedपिछले प्रयासों के कारण, मेरे लिए काम किया:python -m pip install --user --install-option="--prefix='/myFunkyApp/lib'" --ignore-installed <package-name>
जेरेमी जोन्स

0

v1.5.6पायथन v2.7.3(जीएनयू / लिनक्स) पर पाइप के साथ , विकल्प --rootएक वैश्विक स्थापना उपसर्ग को निर्दिष्ट करने की अनुमति देता है, (स्पष्ट रूप से) विशिष्ट पैकेज के विकल्पों के बावजूद। फाई की कोशिश करो,

$ pip install --root=/alternative/prefix/path package_name

0

मैं प्रलेखन का पालन करने और ~ / .pip / pip.conf फ़ाइल बनाने का सुझाव देता हूं। प्रलेखन में ध्यान दें कि निर्दिष्ट हेडर निर्देशिका गायब है, जो निम्न त्रुटि की ओर जाता है:

error: install-base or install-platbase supplied, but installation scheme is incomplete

Conf फ़ाइल की पूर्ण कार्य सामग्री है:

[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-headers=python/include
install-data=python/data

Unfortunatelly मैं स्थापित कर सकता हूं, लेकिन जब पाइप को अनइंस्टॉल करने की कोशिश करता है तो मुझे बताता है कि स्थापना रद्द करने की प्रक्रिया के लिए ऐसा कोई पैकेज नहीं है .... इसलिए कुछ अभी भी गलत है लेकिन पैकेज अपने पूर्वनिर्धारित स्थान पर जाता है।


0

pip install /path/to/package/

अब संभव है।

इस और ध्वज -eया --editableफ़्लैग का उपयोग करने का अंतर यह है कि -eजहां पैकेज सहेजा जाता है (यानी आपके डाउनलोड फ़ोल्डर), उसे अपने पायथन पथ में स्थापित करने के बजाय।

इसका मतलब है कि यदि आप पैकेज को किसी अन्य फ़ोल्डर में हटाते / स्थानांतरित करते हैं, तो आप इसका उपयोग नहीं कर पाएंगे।


इस सवाल का जवाब नहीं है
क्लिंट

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