Virtualenv ile pip kullanırken "İzin reddedildi" nasıl önlenir


95

pipUbuntu makinesinde bir sanal ortamda bir Python paketi kurmaya çalışıyorum , ancak izinle ilgili bir sorunla karşılaşıyorum. Örneğin:

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

şu şekilde sona erer:

hata: '/home/test/virtualenvs/TestVirtualEnv/lib/python3.3/site-packages/markdown2.py' oluşturulamadı: İzin reddedildi

Yapamam sudobunu küresel paketi kuracak beri değil, sanal ortamında. Ben chowned site-packages; lsgösterileri sadece ilgili dizinlere easy_install, pipve setuptools, ve hiçbir şey Markdown ilgili.

İzinle pipilgili hatalarla karşılaşmadan sanal ortamda bir paket nasıl dağıtılır ?


Sadece açıklığa kavuşturmak için: bu virtualenv'i ile sudomi yarattınız ?
sebastian_oe

@sebastian_oe: Yaptığıma inanıyorum . Emin olmak için birini yeniden yaratacağım.
Arseni Mourzenko

4
O zaman sorun bu olabilir. Olmadan bir virtualenv oluşturmayı deneyin sudo.
sebastian_oe

1
@sebastian_oe: Olmadan sanal bir ortam yarattım sudo. Aslında, paket şimdi doğru bir şekilde kuruluyor. Lütfen, yorumunuzu bir cevaba yükseltebilir misiniz, böylece onu kabul edebileyim?
Arseni Mourzenko

1
Ayrıca, farklı kullanıcılar arasında geçiş yapıyorsanız, virtualenvdizine sahip (veya yazma erişimi olan) bir kullanıcı kullandığınızdan emin olun , çünkü virtualenvdiğer kullanıcıyla etkinleştirebilirsiniz , ancak bu, herhangi bir paket kurmanıza izin vermez ve erişim izni verir.
Andrius

Yanıtlar:


109

virtualenvizin sorunlar oluştururken oluşabilir virtualenvolarak sudove daha sonra olmadan faaliyet sudoiçinde virtualenv.

Sorunuzun yorumundan da anlaşılacağı gibi, buradaki çözüm , olmadan içinde çalışamayacak (özellikle yazacak) olanı yaratmaktır .virtualenvsudosudo


5
sudo gerektiren / opt içinde oluşturmak istersem, virtualenv'in sudo olmadan yüklenmeyeceğini düşünüyorum.
Umair A.


5
virtualenvSudo olmadan nasıl oluşturulur ?
Tunn

1
Virtualenv'i ile oluşturduysanız, yeniden oluşturmadan sudokolayca nasıl düzeltilebileceğini öğrenmek için @vingtoft'un yanıtına bakın
David A

107

Çözüm:

Virtualenv'i kök olarak oluşturduysanız, aşağıdaki komutu çalıştırın:

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

Bu muhtemelen sorununuzu çözecektir.

Şerefe


1
Bu benim için çalıştı (chown /usr/local/lib/python3.4), ancak kök olarak bir virtualenv oluşturduğumu düşünmüyorum, aslında Python3.4'ü kök olarak kurmuştum. Hala test ediyorum, ancak bu çözümle ilgili daha fazla sorunla karşılaşacağımı mı düşünüyorsunuz yoksa bu chown çoğu hatayı düzeltir mi?
ntk4

3
Kök olarak virtualenv veya python oluşturup oluşturmadığınızı nasıl anlarsınız?
A__

Bu benim sorunumu çözdü. / Opt / dizininde sudo ayrıcalıkları olmadan yapamayacağım sanal bir ortam oluşturmam gerektiğinden OP ile benzer bir durumdaydım.
sir_chocolate_soup

6

Benim durumumda kullanıyordum mkvirtualenvama python3 kullanacağımı söylemedim. Bu hatayı aldım:

mkvirtualenv hug
pip3 install hug -U

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

Python3 belirlendikten sonra çalıştı:

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

5

Virtualenv'imi sudo kullanarak oluşturmadım. Yani Sebastian'ın cevabı benim için geçerli değildi. Projem çağrıldı utils. utilsDizini kontrol ettim ve şunu gördüm:

-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

Gördüğünüz gibi, utils.egg-infosahip olduğu rootdeğil macuser. Bu yüzden bana permission deniedhata veriyordu . Ayrıca /Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-linkyaratıldığı şekliyle de kaldırmak zorunda kaldım root. Bunları pip install -e .çıkardıktan sonra tekrar yaptım ve işe yaradı.


3

Kök kullanarak sanal ortam oluşturduysanız, bu komutu kullanın

sudo su

size kök erişimi verecek ve ardından bunu kullanarak sanal ortamınızı etkinleştirecektir.

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

1

Sen sanal ortam aktive etmedi Pip kullanmadan önce.

Şununla deneyin:

$(your venv path) . bin/activate

Ve sonra ana klasörünüzde pip -r requirements.txt dosyasını kullanın


1

Ayrıca mevcut bir sanal ortamdayken yeni bir venv oluşturduktan sonra (kazara) bunu yaşadım. bunu teşhis etmenin kolay bir yolu python, simgenin nereye bağlı olduğunu görmek , yani çalıştırın:

ls -l venv/bin/python

ve uygun Python ikilisini gösterdiğinden emin olun. Çoğu sistem için bu /usr/bin/pythonveya olacaktır /usr/bin/python3. mevcut bir sanal ortama işaret ediyorsa, buna benzer bir şey olacaktır /home/youruser/somedir/bin/python. İkincisi ise, mevcut herhangi bir sanal ortamın "içinde" olmadığınızdan emin olurken venv'i yeniden oluşturmanızı öneririm (yani çalıştırın deactivate)


burada yayınlanmıştır çünkü uygun anahtar kelimelerden bahseden popüler bir sorudur, bu nedenle bulunma ve diğer insanlar için yararlı olma olasılığı daha yüksektir
Sam Mason,

0

Eğer sudo kullanırsanız virtualenv oluştururken dizin kök ayrıcalıklarıyla oluşturulur.Bu yüzden sudo olmayan bir kullanıcı ile bir paket kurmaya çalıştığınızda, içine yükleme izniniz olmayacaktır. Bu yüzden her zaman sudo olmadan virtualenv oluşturun ve sudo olmadan yükleyin.

Ayrıca global python'da kurulu paketleri virtualenv'e kopyalayabilirsiniz.

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

Sorun bu değildi: Eğer yorumları okursanız, OP sanal env'i ilk etapta sudo ile yaratmıştı.
NickD
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.