Virtualenv के साथ पाइप का उपयोग करते समय "अनुमति से इनकार" से कैसे बचें


93

मैं pipएक उबंटू मशीन पर एक आभासी वातावरण में पायथन पैकेज को तैनात करने का प्रयास करता हूं , लेकिन एक अनुमति-संबंधित समस्या का सामना करता हूं। उदाहरण के लिए:

(TestVirtualEnv)test@testServer:~$ pip install markdown2

द्वारा समाप्त:

त्रुटि: '/home/test/virtualenvs/TestVirtualEnv/lib/python3.3/site-packages/markdown2.py' नहीं बना सका: अनुमति अस्वीकृत

मैं नहीं कर सकता sudo, क्योंकि यह विश्व स्तर पर पैकेज स्थापित करेगा, और आभासी वातावरण में नहीं। मैं chownएड site-packages; मार्कडाउन से lsसंबंधित केवल निर्देशिकाएं easy_install, pipऔर setuptools, और कुछ भी नहीं दिखाता है ।

pipअनुमति-संबंधित त्रुटियों का सामना किए बिना एक आभासी वातावरण में पैकेज को कैसे तैनात किया जाए ?


बस स्पष्ट करने के लिए: क्या आपने इस virtualenv के साथ बनाया sudo?
sebastian_oe

@sebastian_oe: मेरा मानना ​​है कि मैंने किया। मुझे यकीन है कि एक को फिर से बनाना होगा।
आर्सेनी मूरज़ेंको

4
तब यह समस्या हो सकती है। बिना virtualenv बनाने का प्रयास करें sudo
sebastian_oe

1
@sebastian_oe: मैंने बिना वर्चुअल वातावरण बनाया है sudo। दरअसल, पैकेज अब सही तरीके से इंस्टॉल हो गया है। कृपया, क्या आप अपनी टिप्पणी का उत्तर देने के लिए प्रचार कर सकते हैं ताकि मैं इसे स्वीकार कर सकूं?
आर्सेनी मूरज़ेंको

1
यदि आप अलग-अलग उपयोगकर्ताओं के बीच स्विच कर रहे हैं, तो सुनिश्चित करें कि आप उस उपयोगकर्ता का उपयोग कर रहे हैं जो मालिक है (या पहुंच लिख चुका है) virtualenvनिर्देशिका, क्योंकि आप virtualenvअन्य उपयोगकर्ता के साथ सक्रिय कर सकते हैं , लेकिन यह आपको किसी भी पैकेज को स्थापित करने की अनुमति नहीं देगा और अनुमति प्रदान करेगा।
एंड्रियास

जवाबों:


106

virtualenvअनुमति समस्या तब हो सकती है जब आप virtualenvजैसा बनाते हैं sudoऔर फिर बिना sudoअंदर काम करते हैं virtualenv

के रूप में अपने प्रश्न की टिप्पणी में पता चला, यहाँ समाधान करने के लिए है बनानेvirtualenv के बिना sudoकरने के लिए सक्षम होने के लिए काम के बिना (esp। लिख) उस में sudo


4
अगर मैं इसे बनाना / बनाना चाहता हूँ जिसमें sudo की आवश्यकता हो, तो मुझे लगता है कि virtualenv sudo के बिना इंस्टॉल नहीं होगा।
उमर ए।

7
@sebastian_oe मुझे लगता है कि मैं तुमसे प्यार करता हूँ
Nobbynob Littlun

5
virtualenvबिना सूडो के कैसे बनाये ?
टुन

यदि आपने virtualenv को बनाया है sudo, तो @vingtoft द्वारा उत्तर देखें कि इसे बिना रीक्रिएट किए आसानी से कैसे ठीक किया जा सकता है
David A

103

उपाय:

यदि आपने virtualenv को रूट के रूप में बनाया है, तो निम्न कमांड चलाएँ:

sudo chown -R your_username:your_username path/to/virtuaelenv/

यह शायद आपकी समस्या को ठीक कर देगा।

चियर्स


1
इसने मेरे लिए काम किया (chown /usr/local/lib/python3.4), इसके अलावा मुझे नहीं लगता कि मैंने एक virtualenv को रूट के रूप में बनाया था, मैंने वास्तव में Python3.4 को रूट के रूप में स्थापित किया था। मैं अभी भी परीक्षण कर रहा हूं, लेकिन क्या आपको लगता है कि मैं इस समाधान के साथ किसी और मुद्दे पर चलूंगा, या क्या यह अधिकांश त्रुटियों को ठीक कर देगा?
ntk4

3
यदि आपने virtualenv या python को रूट के रूप में बनाया है तो आपको कैसे पता चलेगा?
__

6

मेरे मामले में, मैं उपयोग कर रहा था mkvirtualenv, लेकिन यह नहीं बताया कि मैं python3 का उपयोग करने जा रहा हूं। मुझे यह त्रुटि मिली:

mkvirtualenv hug
pip3 install hug -U

....
error: could not create '/usr/lib/python3.4/site-packages': Permission denied

यह अजगर 3 निर्दिष्ट करने के बाद काम किया:

mkvirtualenv --python=/usr/bin/python3 hug
pip3 install hug -U

5

मैंने sudo का उपयोग करके अपना virtualenv नहीं बनाया। तो सेबस्टियन का जवाब मेरे लिए लागू नहीं हुआ। मेरे परियोजना कहा जाता है utils। मैंने utilsनिर्देशिका की जाँच की और यह देखा:

-rw-r--r--   1 macuser  staff   983  6 Jan 15:17 README.md
drwxr-xr-x   6 root     staff   204  6 Jan 14:36 utils.egg-info
-rw-r--r--   1 macuser  staff    31  6 Jan 15:09 requirements.txt

जैसा कि आप देख सकते हैं, utils.egg-infoके स्वामित्व में rootनहीं है macuser। इसलिए यह मुझे permission deniedत्रुटि दे रहा था । मुझे भी /Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-linkइसे हटाना था क्योंकि इसे भी बनाया गया था root। मैंने उन्हें pip install -e .हटाने के बाद फिर से किया , और यह काम किया।


3

यदि आपने रूट का उपयोग करके वर्चुअल वातावरण बनाया है तो इस कमांड का उपयोग करें

sudo su

यह आपको रूट एक्सेस देगा और इसके बाद अपने वर्चुअल वातावरण को सक्रिय करेगा

source /root/.env/ENV_NAME/bin/activate

1

आपने पाइप का उपयोग करने से पहले वर्चुअल वातावरण को सक्रिय नहीं किया

इसके साथ कोशिश करें:

$(your venv path) . bin/activate

और फिर अपने मुख्य फ़ोल्डर पर pip -r आवश्यकताएँ.txt का उपयोग करें


1

मैंने एक मौजूदा आभासी वातावरण में रहते हुए एक नया venv बनाने के बाद (दुर्घटना से) ऐसा किया है। इसका निदान करने का एक आसान तरीका यह देखना होगा कि pythonयह कहां से सहमी हुई है, अर्थात:

ls -l venv/bin/python

और सुनिश्चित करें कि यह उपयुक्त पायथन बाइनरी को इंगित करता है। अधिकांश प्रणालियों के लिए यह /usr/bin/pythonया होगा /usr/bin/python3। अगर यह मौजूदा आभासी वातावरण की ओर इशारा करता है तो यह कुछ ऐसा होगा /home/youruser/somedir/bin/python। यदि यह बाद की बात है तो मैं सुझाव दूंगा कि आप किसी भी मौजूदा वर्चुअनव (यानी रन deactivate) को सुनिश्चित न करें कि आप "अंदर" नहीं हैं


यहां पोस्ट किया गया है क्योंकि यह एक लोकप्रिय प्रश्न है जिसमें उपयुक्त कीवर्ड का उल्लेख है, इसलिए अन्य लोगों के लिए उपयोगी और उपयोगी होने की संभावना अधिक है
सैम मेसन

0

Virtualenv बनाते समय यदि आप sudo का उपयोग करते हैं, तो निर्देशिका रूट विशेषाधिकारों के साथ बनाई जाती है। जब आप गैर-sudo उपयोगकर्ता के साथ एक पैकेज स्थापित करने का प्रयास करते हैं, तो आपको इसे स्थापित करने की अनुमति नहीं होगी। इसलिए हमेशा sudo के बिना virtualenv बनाएं और बिना sudo के इंस्टॉल करें।

आप वैश्विक अजगर पर स्थापित पैकेजों को वर्चुअनव के लिए भी कॉपी कर सकते हैं।

cp -r /lib/python/site-packages/* virtualenv/lib/python/site-packages/

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