के साथ विफल पाइप की स्थापना: OSError: [Errno 13] निर्देशिका पर अनुमति से इनकार कर दिया


123

pip install -r requirements.txtनीचे दिए गए अपवाद के साथ विफल रहता है OSError: [Errno 13] Permission denied: '/usr/local/lib/...। क्या गलत है और मैं इसे कैसे ठीक करूं? (मैं Django सेटअप करने के लिए कोशिश कर रहा हूँ )

Installing collected packages: amqp, anyjson, arrow, beautifulsoup4, billiard, boto, braintree, celery, cffi, cryptography, Django, django-bower, django-braces, django-celery, django-crispy-forms, django-debug-toolbar, django-disqus, django-embed-video, django-filter, django-merchant, django-pagination, django-payments, django-storages, django-vote, django-wysiwyg-redactor, easy-thumbnails, enum34, gnureadline, idna, ipaddress, ipython, kombu, mock, names, ndg-httpsclient, Pillow, pyasn1, pycparser, pycrypto, PyJWT, pyOpenSSL, python-dateutil, pytz, requests, six, sqlparse, stripe, suds-jurko
Cleaning up...
Exception:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 283, in run
    requirement_set.install(install_options, global_options, root=options.root_path)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1436, in install
    requirement.install(install_options, global_options, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 672, in install
    self.move_wheel_files(self.source_dir, root=root)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 902, in move_wheel_files
    pycompile=self.pycompile,
  File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 206, in move_wheel_files
    clobber(source, lib_dir, True)
  File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 193, in clobber
    os.makedirs(destsubdir)
  File "/usr/lib/python2.7/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/amqp-1.4.6.dist-info'

संबंधित (macOS / homebrew विशिष्ट) stackoverflow.com/questions/33004708/…
wim

जवाबों:


76

विकल्प) एक virtualenv बनाएँ, इसे सक्रिय करें और इंस्टॉल करें:

virtualenv .venv
source .venv/bin/activate
pip install -r requirements.txt

विकल्प बी) अपने होमडायर में स्थापित करें:

pip install --user -r requirements.txt

मेरी सिफारिश सुरक्षित (ए) विकल्प का उपयोग करती है, ताकि इस परियोजना की आवश्यकताओं को अन्य परियोजनाओं की आवश्यकताओं के साथ हस्तक्षेप न करें।


2
sudo:pip: command not foundइस कमांड को चलाते समय मुझे मेरे aws ec2 उदाहरण पर एक त्रुटि मिली । कृपया मदद कीजिए।
user3768495

2
@ user3768495 संभवतः, डिफ़ॉल्ट रूप से पाइप स्थापित नहीं है। आपका EC2 कौन सा डिस्ट्रो है? इसके अलावा, python2 स्थापित नहीं किया जा सकता है, इसलिए या तो आप python2 स्थापित करें या pip3 का उपयोग करें। हालांकि इसके साथ सावधान रहें।
हेक्टरकैंटो

33
मैंने पढ़ा है कि यह अब कई स्थानों पर अनुशंसित नहीं है। लगता है जैसे हमें पाइप चलाते समय सूडो के उपयोग के प्रति सावधानी बरतनी चाहिए (बर्ट का जवाब देखें)
जस्टस एपेन

3
@JustusEapen: मुझे नहीं पता कि मैं इसके बारे में कैसा महसूस करता हूं। मुझे नहीं लगता कि ओपी के प्रश्न का उचित उत्तर बुनियादी कंप्यूटर स्वच्छता पर एक मैनुअल है, जिसमें "सुपरयूज़र अनुमतियों के साथ छायादार कोड नहीं चलना" और "अपने दांतों को नियमित रूप से ब्रश करना" शामिल है। मुझे लगता है कि इष्टतम उत्तर को इंगित करना चाहिए कि पैकेज प्रति-उपयोगकर्ता या सिस्टम-वाइड आधार पर स्थापित किए जा सकते हैं, और यह कि सिस्टम-वाइड स्थापित करना, जैसा कि ओपी ने चाहा (ऐसा करने के लिए पूरी तरह से स्पष्ट कारण हैं) को सुपर उपयोगकर्ता की अनुमति की आवश्यकता है। सिस्टम पथ पर संकुल स्थापित करने के प्रति सावधानी बरतना शायद किसी अन्य SO प्रश्न पर किसी और की नौकरी है।
टोबिया टेसन

8
sudoसलाह के कारण नीच । भले ही यह अब काम करता है, यह आपको भविष्य में बहुत अधिक सिरदर्द देने वाला है।
गेराल्ड

318

हम वास्तव में के उपयोग की सलाह दे बंद कर देना चाहिए sudoसाथ pip install। पहले प्रयास करना बेहतर है pip install --user। यदि यह विफल रहता है तो यहां शीर्ष पद पर एक नज़र डालें ।

आपके द्वारा उपयोग नहीं किया जाने वाला कारण sudoइस प्रकार है:

जब आप पाइप से चलाते sudoहैं, तो आप रूट उपयोगकर्ता के रूप में इंटरनेट से मनमाना पायथन कोड चला रहे हैं, जो कि एक बड़ा सुरक्षा जोखिम है। यदि कोई PyPI पर कोई दुर्भावनापूर्ण प्रोजेक्ट डालता है और आप इसे स्थापित करते हैं, तो आप अपनी मशीन पर एक हमलावर रूट एक्सेस देते हैं।


5
अच्छा अवलोकन। आखिरकार, सभी के लिए sudo x install, सभी के लिए x(सहित x = make) जाता है।
टोबिया टेसन

1
इससे मेरी समस्या भी हल हो गई। जोड़ने --user क्या करता है?
माइल्स जॉनसन

1
@MilesJohnson जोड़ना --userमूल के बजाय आपके होम डायरेक्टरी में पैकेज स्थापित करता है। इस स्थान पर कुछ स्थापित करने के लिए किसी अतिरिक्त विशेषाधिकार की आवश्यकता नहीं होती है।
बर्ट

1
इसके अतिरिक्त, यदि आप प्रॉक्सी के पीछे रिमोट सर्वर पर हैं, तो "sudo" आपको इंटरनेट रिपॉजिटरी और / या रिमोट सर्वर के नेटवर्क के git रिपॉजिटरी से पैकेज लाने से रोकता है।
Ataxias

2
सभी का उल्लेख sudoएक साल पहले हटा दिया गया था। यह उत्तर अप्रचलित है - कृपया इसे संशोधित करें और अपडेट करें। आपको प्रति-उपयोगकर्ता बनाम सिस्टम-वाइड इंस्टॉल और अनुमतियों का भी उल्लेख करना होगा। अन्य उत्तरों की सीधे आलोचना करने के लिए अपने उत्तर का उपयोग न करें, यह जल्दी से अप्रचलित हो जाएगा।
smci

28

आप ऐसा करने की अनुमति के बिना सिस्टम-वाइड पथ पर एक पैकेज स्थापित करने का प्रयास कर रहे हैं।

  1. सामान्य तौर पर, आप सिस्टम-वाइड-पथ पर पैकेज को स्थापित करने के लिए अपनी जिम्मेदारी परsudo अस्थायी रूप से सुपरयूज़र अनुमतियाँ प्राप्त करने के लिए उपयोग कर सकते हैं :

     sudo pip install -r requirements.txt

    sudo यहाँ और अधिक जानकारी प्राप्त करें

    दरअसल, यह एक बुरा विचार है और इसके लिए कोई अच्छा उपयोग मामला नहीं है, @ wim की टिप्पणी देखें।

  2. यदि आप सिस्टम-वाइड परिवर्तन नहीं करना चाहते हैं, तो आप ध्वज का उपयोग करके अपने प्रति-उपयोगकर्ता पथ पर पैकेज स्थापित कर सकते हैं --user

    यह सब है:

     pip install --user runloop requirements.txt
  3. अंत में, यहां तक ​​कि महीन दानेदार नियंत्रण के लिए , आप एक वर्चुअनव का भी उपयोग कर सकते हैं , जो एक विकास पर्यावरण के लिए बेहतर समाधान हो सकता है, खासकर यदि आप कई परियोजनाओं पर काम कर रहे हैं और हर एक की निर्भरता का ट्रैक रखना चाहते हैं।

    अपने virtualenv को सक्रिय करने के बाद

    $ my-virtualenv/bin/activate

    निम्न आदेश virtualenv के अंदर पैकेज स्थापित करेगा (और सिस्टम-वाइड पथ पर नहीं ):

    pip install -r requirements.txt


4
रूट के साथ पाइप चलाना सुरक्षा जोखिमों के
Nrzonline

इंटरनेट से रूट के रूप में कोड चलाने वाली कोई भी चीज़ सुरक्षा जोखिम के साथ आती है।
टोबिया टेसन

यह लगभग सबसे अच्छा जवाब है, लेकिन अभी भी अपडेट करने की आवश्यकता है। a) अब हमारे पास pyenv/pipenv, उन लोगों का उल्लेख करना चाहिए, जिन्हें virtualenv(या conda-env) b) sudo को हानिकारक माना जाता है, और अन्य उत्तरों को क्यों देखें। इसलिए एनव-आधारित उत्तर को पहले रखें, और सूडो को एक आखिरी, एक बड़े अस्वीकरण के साथ।
21

1
sudo pip install -r requirements.txtकभी सही नहीं होता। सिस्टम का अजगर पर्यावरण प्रणाली, अवधि के अंतर्गत आता है । आप प्रणाली में अधिक अजगर सामान स्थापित करते हैं, पैकेज प्रबंधक केवल (जैसे के साथ यह कर sudo yum install, apt-get, आदि ...) के बाद से उन रेपोस लाभ पुस्तकालयों की सुरक्षित और संगत संस्करण होना चाहिए।
wim

1
@TobiaTesan पुराना sudo make install, आमतौर पर संकलित + जुड़ा हुआ कोड, सिस्टम में स्थापित करने केsudo pip install बाद से अनुरूप नहीं है, पायथन एनवी निर्भरता को अमान्य कर सकता है । मान लीजिए कि एक प्रणाली सेवा है python-frobnicator, जिस पर निर्भरता है froblib(यह पैकेज प्रबंधक में भी होगा और एक संगत संस्करण पर पिन किया जाएगा), और फिर आपके पास sudo pip installकुछ अन्य ऐप या काम है, जिस पर " froblib > 1.2" निर्भरता है । पिप froblibएक नए के साथ सिस्टम संस्करण को खुशी से "अपग्रेड" करेगा , जो असंगत / अनटाइटेड हो सकता है और सिस्टम को तोड़ सकता है।
विम

26

बस स्पष्ट करने की अनुमति दी कि अनुमति के आधार पर linux (ubuntu पर आधारित) में बहुत दर्द के बाद मेरे लिए क्या काम किया, और ऊपर बर्ट के जवाब से लाभ उठाते हुए, मैं अब उपयोग करता हूं ...

$ pip install --user <package-name>

या एक आवश्यकताओं फ़ाइल पर पाइप चल रहा है ...

$ pip install --user -r requirements.txt

और ये वर्चुअल वातावरण बनाने सहित हर पाइप के लिए मज़बूती से काम करते हैं।

हालांकि, मेरे आगे के अनुभव में सबसे साफ समाधान सिस्टम स्तर पर स्थापित python-virtualenvऔर उसके virtualenvwrapperसाथ रहा sudo apt-get installहै।

फिर, आभासी वातावरण के अंदर, का उपयोग pip installबिना --userझंडा और बिना sudo। बहुत क्लीनर, सुरक्षित, और आसान समग्र।


मुझे एक "--user 'इंस्टॉल नहीं किया जा सकता है। इस virtualenv में उपयोगकर्ता साइट-पैकेज दिखाई नहीं देते हैं।" त्रुटि का उपयोग करने का प्रयास करते समयpip install --user -r requirements.txt
अमीर ए। शबानी

@ AmirA.Shabani उत्तर आपके प्रश्न के बाद से संपादित किया गया है। यह अब कहता है «आभासी वातावरण के अंदर,
Daishi

7

उपयोगकर्ता के पास कुछ पायथन इंस्टॉलेशन पथों के लिए लिखित अनुमति नहीं है। आप इसके द्वारा अनुमति दे सकते हैं:

sudo chown -R $USER /absolute/path/to/directory

इसलिए आपको अनुमति देनी चाहिए, फिर इसे फिर से स्थापित करने का प्रयास करें, यदि आपके पास नए रास्ते हैं तो आपको अनुमति भी देनी चाहिए:

sudo chown -R $USER /usr/local/lib/python2.7/

2
काढ़ा के साथ स्थापित अजगर के लिए, यह सही उत्तर है क्योंकि काढ़ा स्थानीय उपयोगकर्ता (कोई रूट) के रूप में पैकेज बनाए रखता है।
इडबरी

9
/ usr / स्थानीय dir को चेस करना एक अच्छा विचार नहीं है। यह उपयोगकर्ता का नहीं है। आपको यूनिक्स फ़ाइल संरचना के बारे में पढ़ना चाहिए।
14:

6
सामग्री के तहत /usrआम तौर पर जड़, इन दिनों के स्वामित्व में किया जाएगा। पुनरावर्ती चांसिंग आपके सिस्टम को प्रमुख रूप से खराब कर सकता है। एवीओआईडी
wim

0

यदि आपको अनुमति चाहिए, तो आप 'sudo' के साथ 'pip' का उपयोग नहीं कर सकते। आप एक चाल कर सकते हैं, ताकि आप do सुडो ’का उपयोग कर सकें और पैकेज स्थापित कर सकें। बस अपने पाइप कमांड के सामने 'सूडो पायथन -एम ...' रखें।

sudo python -m pip install --user -r package_name

मेरे लिए ठीक लगता है, लेकिन क्या आप कृपया कुछ स्पष्टीकरण जोड़ सकते हैं।
पाइथोनिक Jul३३

-1

तो, मुझे यह बिल्कुल सटीक त्रुटि बिल्कुल अलग कारण के लिए मिली। पूरी तरह से अलग, लेकिन होमब्रेव + पाइप बग के कारण , मैंने Google क्लाउड के हेल्प डॉक्स पर सूचीबद्ध इस वर्कअराउंड का पालन ​​किया था , जहाँ आप अपने होम डायरेक्टरी में .pydistutils.cfg फ़ाइल बनाते हैं। इस फ़ाइल में विशेष कॉन्फिग है जो आपको केवल कुछ पुस्तकालयों की स्थापना के लिए उपयोग करना चाहिए। मुझे संकुल को स्थापित करने के बाद उस disutils.cfg फ़ाइल को हटा देना चाहिए था, लेकिन मैं ऐसा करना भूल गया। तो मेरे लिए तय वास्तव में सिर्फ था ...

rm ~/.pydistutils.cfg

और फिर सब कुछ सामान्य के रूप में काम किया। बेशक, यदि आपके पास किसी वास्तविक कारण के लिए उस फ़ाइल में कुछ कॉन्फिग है, तो आप उस फ़ाइल को केवल rm नहीं करना चाहेंगे। लेकिन मामले में किसी और ने उस समाधान को किया, और उस फ़ाइल को निकालना भूल गया, इसने मेरे लिए यह चाल चली!


-1

यह अनुमति की समस्या है,

sudo chown -R $USER /path to your python installed directory

डिफ़ॉल्ट रूप से यह होगा /usr/local/lib/python2.7/

या कोशिश करो,

pip install --user -r package_name

और फिर कहते हैं, pip install -r requirements.txtयह आपके एनवी के अंदर स्थापित होगा

मत कहो, sudo pip install -r requirements.txtयह अनियंत्रित अजगर पथ में स्थापित होगा।

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