"पिप स्थापित -यूज़र ..." का उद्देश्य क्या है?


188

से pip install --help:

 --user      Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on
             Windows. (See the Python documentation for site.USER_BASE for full details.)

Site.USER_BASE के लिए प्रलेखन दिलचस्प * NIX विषय का एक भयानक वर्महोल है जो मुझे समझ में नहीं आता है।

--userसादे अंग्रेजी में क्या उद्देश्य है ? पैकेज को क्यों ~/.local/महत्व देना होगा? क्यों नहीं एक निष्पादन योग्य कहीं मेरे $ पेट में डाल दिया?


2
आप import site; print site.USER_SITEस्थापित स्थान को प्रिंट कर सकते हैं । मेरे लिए मैं मिल गया /${HOME}/.local/lib/python${PY_MAJOR}.${PY_MINOR}/site-packages
ट्रेवर बॉयड स्मिथ

1
होस्ट मशीन पर, पाइप/usr/local/lib/pythonX.X/dist-packages द्वारा स्थापित पैकेजों के लिए डिफ़ॉल्ट निर्देशिका है । लेकिन अगर कोई उपयोगकर्ता उपयोगकर्ता-विशिष्ट पैकेज स्थापित करना चाहता है, तो वे उपयोग कर सकते हैं । वह पैकेज उन समूहों और अन्य लोगों के लिए अनुपलब्ध रहेगा जो उस होस्ट तक पहुंचते हैं। $ sudo pip3 --user install some_package
noobninja

जवाबों:


223

सिस्टम निर्देशिका (जैसे /usr/local/lib/python3.4) के लिए पायथन पैकेज स्थापित करने के लिए पाइप की चूक । इसके लिए रूट एक्सेस की आवश्यकता होती है।

--user इसके बजाय अपने घर निर्देशिका में पाइप स्थापित पैकेज बनाता है, जो किसी विशेष विशेषाधिकार की आवश्यकता नहीं है।


1
धन्यवाद; यह समझ आता है। लेकिन क्या --userयह सुनिश्चित करने की बात है कि कोई पैकेज को रूट के रूप में नहीं चलाता है? (मैं कुछ ऐसी ही कल्पना कर रहा हूँ जैसे ग्रुप-एक्सेस पॉलिसियों को स्थापित करने के लिए विंडसर / किसमेट / बर्पसुइट विकल्प, जिससे सभी प्रोग्राम-फीचर्स रूट के रूप में नहीं चल सकें। क्या यह सही रास्ते पर है?) या --userविकल्प का मतलब अभी है? करने के लिए अनुमति देने के रूट विशेषाधिकारों के बिना स्थापना? अगर ऐसा है, तो मैं कभी इस्तेमाल क्यों नहीं करता sudo pip install foo_package? मुझे पहले कभी भी पाइप के माध्यम से स्थापित करने के लिए रूट-प्रिविलेज की आवश्यकता नहीं है।
Rob Truxal

12
@ रब ट्रक्सल। मुझे लगता है कि मुद्दा यह है कि पैकेज अन्य उपयोगकर्ताओं द्वारा नहीं देखा जाएगा। हो सकता है कि आप पैकेज का एक पुराना / नया संस्करण चाहते हैं, लेकिन यदि आप इसे उस सिस्टम पर स्थापित करते हैं, जो आप अपने काम करने वाले साथी को देने जा रहे हैं।
NDEthos

4
ओह! --userपरम उपयोगकर्ता के अलगाव के बारे में है! यह समझदारी का एक नया रूप देता है। धन्यवाद @NDEthos!
रॉब ट्रिक्सल

ठीक है यहाँ एक (noobish) सवाल है: मान लीजिए कि मैंने एक उपयोगकर्ता फू के रूप में लॉग इन किया है, और फिर मैंने इस कमांड पाइप को इंस्टॉल किया --user -r आवश्यकताएँ। txt .. और सब कुछ बस ठीक है। तब मैंने उपयोगकर्ता बार के रूप में लॉग इन किया, और अजगर प्रोग्राम को चलाया जैसे: sudo -u foo ./odoo-bin .. क्या यह उन पायथन पैकेजों से पढ़ा जाएगा जो foo उपयोगकर्ता के लिए स्थापित किया गया था? या यह कैसे काम करता है?
abbood

1
क्या केवल वर्तमान उपयोगकर्ता के लिए स्थापित पैकेजों को सूचीबद्ध करने का एक तरीका है? यानी कुछ पसंद है pip freeze --user?
abbood

24

--userमें स्थापित करता है site.USER_SITE

मेरे मामले के लिए, यह था /Users/.../Library/Python/2.7/bin। इसलिए मैंने अपने PATH में ( ~/.bash_profileफ़ाइल में) जोड़ा है :

export PATH=$PATH:/Users/.../Library/Python/2.7/bin

15

अन्य उत्तर उल्लेख site.USER_SITEकरते हैं कि पायथन पैकेज कहां रखे गए हैं। यदि आप बायनेरिज़ की तलाश में हैं, तो ये अंदर जाते हैं {site.USER_BASE}/bin

यदि आप इस निर्देशिका को अपने शेल के खोज पथ में जोड़ना चाहते हैं, तो उपयोग करें:

export PATH="${PATH}:$(python3 -c 'import site; print(site.USER_BASE)')/bin"

14

बस एक चेतावनी:

इस मुद्दे के अनुसार , --userवर्तमान में वर्चुअल एनवी के अंदर मान्य नहीं है pip, क्योंकि उपयोगकर्ता का स्थान वास्तव में वर्चुअल वातावरण के लिए मायने नहीं रखता है।

इसलिए pip install --user some_pkg आभासी वातावरण के अंदर उपयोग न करें , अन्यथा, आभासी वातावरण pipभ्रमित हो जाएगा। देखें इस उत्तर अधिक जानकारी के लिए।


11

स्थापित करने का सबसे अच्छा तरीका भ्रम की virtualenvआवश्यकता नहीं है --user। आप अधिक लचीलापन प्राप्त करेंगे और विभिन्न अजगर संस्करणों और परियोजनाओं को बंद करने के बारे में चिंता न करें जब आप एक पैकेज स्थापित करते हैं।

https://virtualenv.pypa.io/en/stable/


8

MacOS पर, --userध्वज का उपयोग करने का कारण यह सुनिश्चित करना है कि ओएस ओएस पर निर्भर करता है हम पुस्तकालयों को भ्रष्ट नहीं करते हैं। कई macOS उपयोगकर्ताओं के लिए एक रूढ़िवादी दृष्टिकोण एक कमांड के साथ पाइप को स्थापित या अद्यतन करने से बचने के लिए है जिसकी आवश्यकता है sudo। इस प्रकार, इसमें इंस्टॉल करना शामिल है /usr/local/bin...

रेफरी: नवम के लिए अजगर स्थापित करना ( https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim )

मैं नहीं कर रहा हूँ सब स्पष्ट क्यों में स्थापित करने /usr/local/binपर एक मैक एक जोखिम तथ्य यह है कि प्रणाली में ही अजगर बाइनरी पर निर्भर करता है दिया है /Library/Frameworks/और /usr/bin। मुझे संदेह है क्योंकि जैसा कि ऊपर उल्लेख किया गया है, /usr/local/binआवश्यकता में स्थापित करना sudoजो सिस्टम पुस्तकालयों के साथ एक महंगी गलती करने के लिए दरवाजा खोलता है। इस प्रकार, ~/.local/binइस जोखिम से बचने के लिए एक निश्चित फायर तरीका है।

Ref: एक मैक पर अजगर का उपयोग करना ( https://docs.python.org/2/use/mac.html )

अंत में, डिग्री में पैकेज स्थापित करने का एक लाभ है /usr/local/bin, मुझे आश्चर्य है कि क्या यह निर्देशिका के मालिक को बदलने के लिए समझ में आता rootहै user? यह sudoप्रणाली-निर्भर परिवर्तन करने से बचाव करते हुए उपयोग करने से बचता है । * क्या यह सुरक्षा डिफॉल्ट है कि यूनिक्स सिस्टम को अतीत में (सर्वर के रूप में) अधिक बार उपयोग किया जाता है? या कम से कम, मैक उपयोगकर्ताओं को सर्वर की मेजबानी नहीं करने का एक अच्छा तरीका है?

* नोट: मैक का सिस्टम इंटीग्रिटी प्रोटेक्शन (SIP) फीचर यूजर को सिस्टम पर निर्भर लाइब्रेरी को बदलने से भी बचाता है।

- इ


8

आभासी वातावरण के बिना

pip <command> --user सिस्टम-वाइड पैकेज स्थापित स्थान के बजाय, जो डिफ़ॉल्ट है, वर्तमान उपयोगकर्ता खाते के स्थानीय अजगर पैकेज स्थापित स्थान पर काम करने के लिए वर्तमान पाइप कमांड के दायरे को बदलता है।

यह केवल एक बहु-उपयोगकर्ता मशीन पर मायने रखता है। सिस्टम स्थान पर स्थापित कुछ भी सभी उपयोगकर्ताओं को दिखाई देगा, इसलिए उपयोगकर्ता स्थान पर स्थापित करने से पैकेज की स्थापना अन्य उपयोगकर्ताओं से अलग रहेगी (वे इसे नहीं देखेंगे, और इसका उपयोग करने के लिए इसे अलग से स्थापित करना होगा)। क्योंकि संस्करण संघर्ष हो सकते हैं, अन्य पैकेजों के लिए आवश्यक निर्भरता वाले पैकेज को स्थापित करने से समस्याएं हो सकती हैं, इसलिए सिस्टम पैकेज स्थान पर उपयोगकर्ता द्वारा दिए गए सभी पैकेजों को धक्का देना सबसे अच्छा नहीं है।

  • यदि यह एकल-उपयोगकर्ता मशीन है, तो --userस्थान पर स्थापित करने के लिए बहुत कम या कोई अंतर नहीं है । यह एक अलग फ़ोल्डर में स्थापित किया जाएगा, जो पैकेज के आधार पर और पथ में जोड़े जाने की आवश्यकता हो सकती है या नहीं और इसका उपयोग कैसे किया जाए (कई पैकेज कमांड-लाइन टूल स्थापित करते हैं जो शेल से चलने के लिए पथ पर होना चाहिए) ।
  • यदि यह एक बहु-उपयोगकर्ता मशीन है, --userतो रूट / sudo का उपयोग करना या व्यवस्थापक स्थापना की आवश्यकता और प्रत्येक उपयोगकर्ता के पायथन वातावरण को प्रभावित करना पसंद किया जाता है, सामान्य पैकेजों के मामलों को छोड़कर, जिसे व्यवस्थापक डिफ़ॉल्ट रूप से सभी उपयोगकर्ताओं को उपलब्ध कराना चाहता है।
    • नोट: प्रति टिप्पणियां, अधिकांश यूनिक्स / लिनक्स इंस्टॉल पर यह बताया गया है कि सिस्टम इंस्टॉल को सामान्य पैकेज प्रबंधक, जैसे apt, के बजाय का उपयोग करना चाहिए pip

आभासी वातावरण के साथ

--userएक सक्रिय venv / virtualenv वातावरण में विकल्प स्थानीय उपयोगकर्ता अजगर स्थान (एक आभासी वातावरण के बिना के रूप में ही) के लिए स्थापित हो जाएगा।

संकुल को डिफ़ॉल्ट रूप से आभासी वातावरण में स्थापित किया जाता है, लेकिन यदि आप इसका उपयोग करते हैं तो --userयह आभासी वातावरण के बाहर स्थापित करने के लिए मजबूर करेगा, उपयोगकर्ताओं में अजगर स्क्रिप्ट निर्देशिका (विंडोज में, यह वर्तमान में c:\users\<username>\appdata\roaming\python\python37\scriptsपायथन 3.7 के साथ मेरे लिए है)।

हालाँकि, आप वर्चुअल वातावरण में (भले ही आपने --userवर्चुअल वातावरण में उपयोग किया हो) किसी सिस्टम या उपयोगकर्ता को एक्सेस करने में सक्षम नहीं होंगे ।

यदि आप --system-site-packagesतर्क के साथ एक आभासी वातावरण स्थापित करते हैं, तो आपके पास अजगर के लिए सिस्टम स्क्रिप्ट फ़ोल्डर तक पहुंच होगी। मेरा मानना ​​है कि इसमें उपयोगकर्ता अजगर स्क्रिप्ट फ़ोल्डर भी शामिल है, लेकिन मैं अनिश्चित हूं। हालाँकि, इसके लिए अनपेक्षित परिणाम हो सकते हैं और यह आभासी वातावरण का उपयोग करने का अभीष्ट तरीका नहीं है।


पायथन सिस्टम का स्थान और स्थानीय उपयोगकर्ता स्थापित फ़ोल्डर

आप के साथ अजगर के लिए उपयोगकर्ता स्थापित फ़ोल्डर का स्थान पा सकते हैं python -m site --user-base। मुझे Q & A की परस्पर विरोधी जानकारी मिल रही है, दस्तावेज़ और वास्तव में मेरे पीसी पर इस कमांड का उपयोग करते हुए कि क्या चूक हैं, लेकिन वे उपयोगकर्ता के होम डायरेक्टरी ( ~शॉर्टकट * निक्स और c:\users\<username>आमतौर पर विंडोज के लिए) के नीचे हैं।


अन्य जानकारी

--userविकल्प हर आदेश के लिए एक मान्य नहीं है। उदाहरण के लिए, pip uninstallजहाँ भी उन्हें स्थापित किया गया था (उपयोगकर्ता फ़ोल्डर, आभासी पर्यावरण फ़ोल्डर, आदि में) पैकेज खोजे और अनइंस्टॉल करें और --userविकल्प मान्य नहीं है।

स्थापित की गई चीजें pip install --userस्थानीय स्थान पर स्थापित की जाएंगी जो केवल वर्तमान उपयोगकर्ता खाते द्वारा देखी जाएंगी, और उन्हें रूट एक्सेस (* निक्स) या व्यवस्थापक एक्सेस (विंडोज पर) की आवश्यकता नहीं होगी।

--userविकल्प संशोधित सभी pip आदेशों को यह देखने के लिए स्वीकार / उपयोगकर्ता पर काम फ़ोल्डर स्थापित करते हैं, इसलिए यदि आप का उपयोग pip list --userयह होगा केवल दिखाने के लिए आप के साथ इंस्टॉल किए गए पैकेज pip install --user


1
क्या आप पहले भाग को रीफ़्रेश करने पर विचार करेंगे? एक पायथन आभासी वातावरण के बाहर यह वास्तव pip installमें --userपूरी तरह से उपयोग करने से बचने के लिए सबसे अच्छा है । यह उन स्थानों पर पायथन पैकेज स्थापित करेगा जो वास्तव में सिस्टम के पैकेज प्रबंधक (उदाहरण के लिए aptडेबियन / उबंटू में) को छोड़ देना चाहिए । इसके साथ खिलवाड़ न करना बेहतर है, इससे बहुत सारे मुद्दे सामने आते हैं। यदि एक पायथन पैकेज सभी उपयोगकर्ताओं के लिए उपलब्ध होना चाहिए, तो ऑपरेटिंग सिस्टम के पैकेज प्रबंधक का उपयोग करें, लेकिन ऐसा न करें sudo pip install ...। एक विकल्प है sudo pip install --target ...। विंडोज पर यह एक समस्या से कम नहीं है।
सिनोरोक

ठीक है - आप 'आभासी वातावरण के बिना' अनुभाग में अंतिम गोली बिंदु की दूसरी छमाही का मतलब है? यदि नहीं, तो कौन से विशिष्ट भाग? (इस अद्यतन के लिए सीधे इसे संपादित करने के लिए स्वतंत्र महसूस करें, मैं मुख्य रूप से एक * निक्स उपयोगकर्ता नहीं हूं)
लाइटसीसी

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

@sinoroc I ने उस अनुच्छेद में एक नोट जोड़ा। अगर मैं और अधिक सटीक हो, तो इसे और अधिक सटीक होने के लिए अपडेट करें, या कहीं और संपादित करें।
लाइटसीसी

1

क्यों नहीं बस एक निष्पादन योग्य मेरे $ PATH में डाल दिया

~/.local/bin directoryसैद्धांतिक रूप से आपके में होने की उम्मीद है $PATH

इन लोगों के अनुसार इसका उपयोग करते समय इसे जोड़ने में बग नहीं है ।$PATHsystemd

यह उत्तर इसे और अधिक विस्तार से बताता है।

लेकिन भले ही अपने distro शामिल~/.local/bin निर्देशिका के लिए$PATH , यह निम्नलिखित प्रपत्र (अंदर में हो सकता है ~/.profile):

if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

यदि आपको पहले लॉगआउट करने की आवश्यकता नहीं है, यदि निर्देशिका पहले नहीं थी।

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