pip install -r requirements.txt
kończy się niepowodzeniem z poniższym wyjątkiem OSError: [Errno 13] Permission denied: '/usr/local/lib/...
. Co jest nie tak i jak to naprawić? (Próbuję skonfigurować 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'
python
permissions
pip
install
RunLoop
źródło
źródło
Odpowiedzi:
Opcja a) Utwórz virtualenv, aktywuj go i zainstaluj:
Opcja b) Zainstaluj w swoim katalogu domowym:
Moje zalecenie użyj opcji bezpiecznej (a), aby wymagania tego projektu nie kolidowały z wymaganiami innych projektów.
źródło
sudo:pip: command not found
w mojej instancji aws ec2 podczas uruchamiania tego polecenia. Proszę pomóż.sudo
. mimo że działa teraz, przyprawi Cię o wiele bólów głowy w przyszłości.Naprawdę powinniśmy przestać doradzać używanie
sudo
withpip install
. Lepiej najpierw spróbowaćpip install --user
. Jeśli to się nie powiedzie, spójrz na najwyższy wpis tutaj .Powód, dla którego nie powinieneś używać
sudo
jest następujący:Kiedy uruchamiasz pip with
sudo
, uruchamiasz dowolny kod Pythona z Internetu jako użytkownik root, co jest dość dużym zagrożeniem bezpieczeństwa. Jeśli ktoś umieści złośliwy projekt na PyPI i go zainstalujesz, dajesz atakującemu uprawnienia roota do twojego komputera.źródło
sudo x install
, wszystkichx
(w tymx = make
).--user
zainstalowanie pakietu w katalogu domowym, a nie w katalogu głównym. Zainstalowanie czegoś w tej lokalizacji nie wymaga żadnych dodatkowych uprawnień.sudo
zostały usunięte rok temu. Ta odpowiedź jest nieaktualna - popraw ją i zaktualizuj. Należy również wspomnieć o instalacjach dla poszczególnych użytkowników i o instalacjach w całym systemie oraz o uprawnieniach. Nie używaj swojej odpowiedzi do bezpośredniej krytyki innych odpowiedzi, które szybko się dezaktualizują.Próbujesz zainstalować pakiet na ścieżce obejmującej cały system bez posiadania uprawnień.
Ogólnie rzecz biorąc, możesz użyćsudo
do tymczasowego uzyskania uprawnień superużytkownika na swoją odpowiedzialność w celu zainstalowania pakietu na ścieżce obejmującej cały system:Więcej informacji znajdzieszsudo
tutaj .Właściwie to zły pomysł i nie ma dla niego dobrego przypadku, zobacz komentarz @ wim.
Jeśli nie chcesz wprowadzać zmian w całym systemie, możesz zainstalować pakiet w ścieżce dla użytkownika przy użyciu rozszerzenia
--user
flagi.Wystarczy:
Wreszcie, aby uzyskać jeszcze dokładniejszą kontrolę , możesz również użyć virtualenv , który może być lepszym rozwiązaniem dla środowiska programistycznego, zwłaszcza jeśli pracujesz nad wieloma projektami i chcesz śledzić zależności każdego z nich.
Po aktywowaniu virtualenv za pomocą
$ my-virtualenv/bin/activate
następujące polecenie zainstaluje pakiet wewnątrz virtualenv (a nie na ścieżce dla całego systemu):
pip install -r requirements.txt
źródło
pyenv/pipenv
, powinniśmy wspomnieć o tych, zamiastvirtualenv
(lubconda-env
) b) sudo uważane za szkodliwe i zobaczyć inne odpowiedzi, dlaczego. Więc umieść odpowiedź opartą na env jako pierwszą, a sudo na końcu, z dużym zastrzeżeniem.sudo pip install -r requirements.txt
nigdy nie jest w porządku. Środowisko Pythona systemu należy do systemu, kropka . Jeśli nie zainstalować Pythona więcej rzeczy do systemu, zrób to z menedżera pakietów tylko (npsudo yum install
,apt-get
itp ...), ponieważ te repo powinny mieć bezpiecznych i zgodnych wersji bibliotek skutku.sudo make install
, zwykle skompilowany + linkowany kod nie jest tak naprawdę analogiczny do a,sudo pip install
ponieważ instalacja w systemie Python env może unieważnić zależności . Załóżmy, że istnieje usługa systemowapython-frobnicator
, która ma zależność odfroblib
(będzie to również znajdować się w menedżerze pakietów i przypięta do zgodnej wersji), a następnie jestsudo pip install
inna aplikacja lub biblioteka zależna od „froblib > 1.2
”. Pip z radością „zaktualizuje” wersję systemufroblib
do nowszej, która może być niekompatybilna / niesprawdzona i zepsuć system.Po prostu wyjaśniając, co zadziałało dla mnie po wielu bólach w Linuksie (opartym na systemie Ubuntu) na podstawie błędów odmowy uprawnień i wykorzystując powyższą odpowiedź Berta, teraz używam ...
lub jeśli uruchamiasz pip na pliku wymagań ...
i działają niezawodnie dla każdej instalacji pip, w tym tworzenia środowisk wirtualnych.
Jednak najczystszym rozwiązaniem z moich dalszych doświadczeń była instalacja
python-virtualenv
i korzystanievirtualenvwrapper
zsudo apt-get install
na poziomie systemowym.Następnie w środowiskach wirtualnych używaj
pip install
bez--user
flagi ORAZ bezsudo
. Znacznie czystsze, bezpieczniejsze i ogólnie łatwiejsze.źródło
pip install --user -r requirements.txt
Użytkownik nie ma uprawnień do zapisu w niektórych ścieżkach instalacyjnych języka Python. Możesz udzielić zgody poprzez:
Powinieneś więc dać pozwolenie, a następnie spróbować zainstalować go ponownie, jeśli masz nowe ścieżki, powinieneś również przyznać uprawnienia:
źródło
/usr
dzisiejszych czasach rzeczy poniżej zwykle należałyby do roota. Rekurencyjne żarcie tam może poważnie zepsuć twój system. UNIKAJ .Jeśli potrzebujesz uprawnień, nie możesz używać „pip” z „sudo”. Możesz zrobić sztuczkę, aby móc użyć „sudo” i zainstalować pakiet. Po prostu umieść „sudo python -m ...” przed poleceniem pip.
źródło
Tak więc otrzymałem ten sam dokładny błąd z zupełnie innego powodu. Ze względu na całkowicie oddzielny, ale znany błąd Homebrew + pip , zastosowałem to obejście wymienione w dokumentacji pomocy Google Cloud, w której tworzysz plik .pydistutils.cfg w swoim katalogu domowym. Ten plik ma specjalną konfigurację, której powinieneś używać tylko do instalacji niektórych bibliotek. Powinienem był usunąć ten plik disutils.cfg po zainstalowaniu pakietów, ale zapomniałem o tym. Więc poprawką dla mnie było po prostu ...
rm ~/.pydistutils.cfg
.A potem wszystko działało normalnie. Oczywiście, jeśli masz jakąś konfigurację w tym pliku z prawdziwego powodu, nie będziesz chciał po prostu skorygować tego pliku. Ale na wypadek, gdyby ktoś inny zastosował to obejście i zapomniał usunąć ten plik, to załatwiło sprawę!
źródło
To problem z pozwoleniem,
Domyślnie tak byłoby
/usr/local/lib/python2.7/
lub spróbuj
a następnie powiedz,
pip install -r requirements.txt
że to zainstaluje się w twoim środowisku envnie mów,
sudo pip install -r requirements.txt
że to zainstaluje się w dowolnej ścieżce Pythona.źródło