pip kurulumu başarısız: OSError: [Errno 13] Dizinde izin reddedildi


123

pip install -r requirements.txtaşağıdaki istisna dışında başarısız olur OSError: [Errno 13] Permission denied: '/usr/local/lib/.... Sorun ne ve bunu nasıl düzeltebilirim? ( Django'yu kurmaya çalışıyorum )

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'

İlgili (macOS / homebrew'e özgü) stackoverflow.com/questions/33004708/…
wim

Yanıtlar:


76

Seçenek a) Bir virtualenv oluşturun, etkinleştirin ve kurun:

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

Seçenek b) Ana sayfanıza yükleyin:

pip install --user -r requirements.txt

Benim tavsiyem güvenli (a) seçeneğini kullanın, böylece bu projenin gereksinimleri diğer proje gereksinimlerini etkilemez.


2
sudo:pip: command not foundBu komutu çalıştırırken aws ec2 örneğimde buna benzer bir hata aldım . Lütfen yardım et.
user3768495

2
@ user3768495 Muhtemelen pip varsayılan olarak kurulu değildir. EC2'niz hangi dağıtımdır? Ayrıca, python2 yüklenmemiş olabilir, bu nedenle ya python2 yüklersiniz ya da pip3 kullanırsınız. Yine de buna dikkat edin.
hectorcanto

33
Bunun birçok yerde tavsiye edilmediğini okudum. Pip çalıştırırken sudo kullanımına karşı dikkatli olmalıyız gibi görünüyor (Bert'in cevabına bakın)
Justus Eapen

3
@JustusEapen: Bu konuda nasıl hissettiğimi bilmiyorum. OP'nin sorusuna verilecek doğru cevabın, "süper kullanıcı izinleriyle gölgeli kod çalıştırmayın" ve "dişlerinizi düzenli olarak fırçalayın" dahil, temel bilgisayar hijyeni hakkında bir kılavuz olduğunu sanmıyorum. En uygun cevabın, paketlerin kullanıcı bazında veya sistem genelinde kurulabileceğini ve OP'nin istediği gibi sistem genelinde kurulumun (bunu yapmak için çok çeşitli nedenler vardır) süper kullanıcı izni gerektirdiğini belirtmesi gerektiğini düşünüyorum. Sistem yoluna paket yüklemeye karşı uyarı, muhtemelen başka bir SO sorusundaki bir başkasının işidir.
Tobia Tesan

8
sudotavsiye nedeniyle olumsuz oylama . şimdi işe yarıyor olsa bile, gelecekte size çok fazla baş ağrısı verecek.
Gerald

318

Biz gerçekten kullanımını danışmanlık durdurmalıdır sudoile pip install. İlk denemek daha iyidir pip install --user. Bu başarısız olursa o zaman üst yazı bakmak burada .

Kullanmamanız gereken sebep sudoaşağıdaki gibidir:

Pip ile çalıştırdığınızda sudo, root kullanıcısı olarak internetten rastgele Python kodu çalıştırıyorsunuz, bu oldukça büyük bir güvenlik riski. Birisi PyPI'ye kötü amaçlı bir proje koyarsa ve siz onu yüklerseniz, bir saldırganın makinenize kök erişimi vermiş olursunuz.


5
İyi gözlem. Sonuçta bu, herkes için sudo x install, herkes için x(dahil x = make) geçerlidir.
Tobia Tesan

1
Bu aynı zamanda sorunumu da çözdü. Eklemek - kullanıcı ne yapar?
Miles Johnson

1
@MilesJohnson Eklemek --user, paketi kök yerine ana dizininize yükler. Bu konuma bir şey yüklemek herhangi bir ekstra ayrıcalık gerektirmez.
bert

1
Ek olarak, bir proxy'nin arkasındaki uzak bir sunucu üzerindeyseniz, "sudo", paketleri uzak sunucu ağının internet depolarından ve / veya git depolarından getirmenizi engeller.
Ataxias

2
İle ilgili tüm sözler sudobir yıl önce kaldırıldı. Bu yanıt eski - lütfen düzeltin ve güncelleyin. Ayrıca, kullanıcı başına ve sistem genelinde yüklemeler ve izinlerden de bahsetmeniz gerekir. Cevabınızı, hızla geçerliliğini yitirecek diğer cevapları doğrudan eleştirmek için kullanmayın.
smci

28

Bunu yapmak için izniniz olmadan sistem genelindeki yola bir paket yüklemeye çalışıyorsunuz.

  1. Genel olarak, paketi sistem genelindeki yola yüklemek sudoiçin geçici olarak süper kullanıcı izinlerini kendi sorumluluğunuzda almak için kullanabilirsiniz:

     sudo pip install -r requirements.txt

    sudo Burada daha fazlasını bulun .

    Aslında, bu kötü bir fikir ve iyi bir kullanım durumu yok, bkz. @ Wim'in yorumu.

  2. Sistem çapında değişiklikler yapmak istemiyorsanız , bayrağı kullanarak paketi kullanıcı başına yolunuza yükleyebilirsiniz --user.

    Tek gereken:

     pip install --user runloop requirements.txt
  3. Son olarak, daha da ince taneli kontrol için, özellikle birden çok proje üzerinde çalışıyorsanız ve her birinin bağımlılıklarını takip etmek istiyorsanız , bir geliştirme ortamı için üstün bir çözüm olabilecek bir virtualenv'i de kullanabilirsiniz .

    İle sanal ortamınızı etkinleştirdikten sonra

    $ my-virtualenv/bin/activate

    Aşağıdaki komut (ve virtualenv iç paketi kuracak değil sistem genelinde yolda):

    pip install -r requirements.txt


4
Pip'i

Kök olarak İnternet'ten kod çalıştıran herhangi bir şeyi çalıştırmak güvenlik risklerini beraberinde getirir .
Tobia Tesan

Bu neredeyse en iyi cevap, ancak yine de güncellenmesi gerekiyor. a) Şimdi pyenv/pipenv, virtualenv(veya conda-env) b) sudo'nun zararlı olduğu düşünülen bunlardan bahsetmeliyiz ve neden diğer cevapları görelim. Öyleyse, büyük bir sorumluluk reddi beyanıyla en önce env tabanlı yanıtı ve son olarak sudo'yu koyun.
smci

1
sudo pip install -r requirements.txtasla doğru değildir. Sistemin python ortamı sisteme aittir . Sisteme daha fazla python malzemesi yüklerseniz, bunu yalnızca paket yöneticisiyle yapın (örn sudo yum install. apt-get, Vb ...) çünkü bu depolarda kitaplıkların güvenli ve uyumlu sürümleri bulunmalıdır.
wim

1
@TobiaTesan Eski sudo make install, genellikle derlenmiş + bağlantılı kod, a ile gerçekten benzer değildir, sudo pip installçünkü Python env sistemine yükleme bağımlılıkları geçersiz kılabilir . python-frobnicatorBağımlılığı olan bir sistem hizmeti olduğunu varsayalım froblib(bu aynı zamanda paket yöneticisinde olacak ve uyumlu bir sürüme sabitlenecektir) ve ardından sudo pip install" froblib > 1.2" bağımlılığı olan başka bir uygulama veya kütüphane var . Pip, froblibuyumsuz / test edilmemiş ve sistemi bozabilecek daha yeni bir sistem sürümünü mutlu bir şekilde "yükseltir" .
wim

26

Sadece linux'ta (ubuntu temelli) çok fazla acıdan sonra benim için neyin işe yaradığını açıklığa kavuşturmak için izin verilmeyen hatalar ve Bert'in yukarıdaki cevabından yararlanarak şimdi kullanıyorum ...

$ pip install --user <package-name>

veya bir gereksinimler dosyasında pip çalıştırıyorsanız ...

$ pip install --user -r requirements.txt

ve bunlar, sanal ortamlar oluşturmak dahil her pip kurulumu için güvenilir bir şekilde çalışır.

Ancak, en temiz çözüm benim daha ileri deneyim yüklemek olmuştur python-virtualenvve virtualenvwrappersahip sudo apt-get installsistem düzeyinde.

Ardından, sanal ortamlar içinde kullanmak pip installolmadan --userbayrağı VE olmadan sudo. Genel olarak çok daha temiz, daha güvenli ve daha kolay.


"Bir '- kullanıcı' kurulumu gerçekleştirilemiyor. Kullanıcı site paketleri bu sanal ortamda görünmüyor." kullanmaya çalışırken hatapip install --user -r requirements.txt
Amir A. Shabani

@ AmirA.Shabani cevabı sorunuzdan bu yana düzenlendi. Şimdi "sanal ortamlarda, - kullanıcı bayrağı ve sudo olmadan pip kurulumunu kullanın" diyor
Daishi

7

Kullanıcı, bazı Python kurulum yolları için yazma iznine sahip değil. İzin verebilirsiniz:

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

Bu yüzden izin vermeli, sonra tekrar kurmayı denemelisiniz, eğer yeni yollarınız varsa ayrıca izin vermelisiniz:

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

2
Brew ile kurulan python için bu doğru cevaptır çünkü brew, paketleri yerel kullanıcı olarak tutar (kök yok).
idbrii

9
/ usr / local dizinini chowning iyi bir fikir değil. Kullanıcıya ait değildir. Unix dosya yapısını okumalısınız.
user8162

6
/usrBu günlerde altındaki öğeler genellikle root tarafından sahip olunur. Orada yinelemeli olarak chowning, sisteminizi büyük ölçüde bozabilir. KAÇININ .
wim

0

İzinlere ihtiyacınız varsa, 'pip' ile 'sudo' kullanamazsınız. Bir numara yapabilirsiniz, böylece 'sudo' kullanabilir ve paketi kurabilirsiniz. Pip komutunuzun önüne 'sudo python -m ...' koyun.

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

Bana iyi görünüyor, ama lütfen biraz açıklama ekler misiniz?
pythonic833

-1

Yani, tamamen farklı bir nedenden dolayı aynı hatayı aldım. Nedeniyle tamamen ayrı, ama bilinen Homebrew + pip hata , ben takip etmişti bu geçici çözümü evinizdeki dizininde bir .pydistutils.cfg dosyası oluşturmak tarihinde Cloud'un yardım dokümanlar, listelenen. Bu dosya, yalnızca belirli kitaplıkları yüklemeniz için kullanmanız gereken özel bir yapılandırmaya sahiptir. Paketleri yükledikten sonra o disutils.cfg dosyasını kaldırmalıydım, ancak bunu yapmayı unuttum. Yani benim için düzeltme aslında sadece ...

rm ~/.pydistutils.cfg.

Ve sonra her şey normal çalıştı. Elbette, o dosyada gerçek bir nedenden ötürü bazı yapılandırmalarınız varsa, o zaman o dosyayı sadece düzeltmek istemezsiniz. Ancak başka birinin bu geçici çözümü yaptığı ve bu dosyayı kaldırmayı unutması durumunda, bu benim için hile yaptı!


-1

İzin sorunu nedeniyle,

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

varsayılan olurdu /usr/local/lib/python2.7/

veya Dene,

pip install --user -r package_name

ve sonra söyle pip install -r requirements.txt ortamınızın içine yükleneceğini

söyleme, sudo pip install -r requirements.txtbu keyfi python yoluna yüklenecek.

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.