2015-07-20 14 views
55

Próbuję skonfigurować Django.pip install -r: OSError: [Errno 13] Odmowa uprawnień

Kiedy biegnę pip install -r requirements.txt, pojawia się następujący wyjątek:

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' 

co się stało i jak to naprawić?

Odpowiedz

33

Czy próbowałeś z sudo?

sudo pip install -r requirements.txt 
+1

Otrzymałem błąd podobny do tego 'sudo: pip: command not found' na moim instancji aws ec2 podczas uruchamiania tego polecenia. Proszę pomóż. – user3768495

+0

To zadziałało dla mnie - mam link wyjaśniający dlaczego? –

+0

@ user3768495 Prawdopodobnie twoja wersja 'pip' znajduje się w'/usr/local/bin', która nie znajduje się na 'PATH' użytkownika root. Możesz spróbować podać absolutną ścieżkę '/ usr/local/bin/pip' w powyższym poleceniu. –

21

Być może nie jesteś rootem.

Ogólnie, można użyć sudo tymczasowo uzyskać SUPERUŻYTKOWNIK uprawnienia:

sudo pip install -r requirements.txt 

Znajdź więcej o sudohere.

Jeśli nie chcesz, aby zmian systemowych (i drugą bert's answer w mówiąc prawdopodobnie nie), po tej instrukcji: How can I install packages in my $HOME folder with pip?.

TL; DR:

pip install --user runloop requirements.txt 

Można również użyć virtualenv, co może być jeszcze lepszym rozwiązaniem dla środowiska rozwoju, zwłaszcza jeśli pracują na wielu projektów i chcesz śledzić zależności każdego z nich.

+2

Running PIP korzenia pochodzi z [ zagrożenia bezpieczeństwa] (https://stackoverflow.com/a/42021993/3202958) – Nrzonline

+0

@Nrzonline: dokładnie to miałem na myśli, mówiąc: "jeśli nie chcesz wprowadzać zmian w całym systemie (a ja odpowiadam, prawdopodobnie nie) i dlatego zawarłem alternatywną metodę z '--user';) Z reguły, oczywiście, uruchamianie * nic * z uprawnieniami administratora wymaga przestrogi, ale to jest tym bardziej prawdziwe dla instalatorów, ale są uzasadnione powody instalacji w prefiksie systemu. –

202

Powinniśmy naprawdę przestać doradza stosowanie sudo z pip install. Lepiej najpierw wypróbować pip install --user. Jeśli to się nie powiedzie, spójrz na najwyższy wpis here.

Powodem nie należy używać sudo jest następujący:

Po uruchomieniu PIP z sudo, używasz dowolnego kodu Pythona z internetu jako użytkownik root, który jest dość poważne zagrożenie bezpieczeństwa. Jeśli ktoś umieszcza złośliwy projekt na PyPI i instalujesz go, dajesz osobie atakującej dostęp do twojego komputera.

+1

Czy mógłbyś proszę rozwinąć? – RunLoop

+2

Tak, oczywiście, przepraszam. Zmienię moją odpowiedź! – bert

+1

Dzięki - warto wiedzieć! – RunLoop

18

Wystarczy wyjaśniając co pracował dla mnie za dużo bólu w linux (ubuntu based) na brak dostępu błędy i wykorzystanie z odpowiedzią Berta powyżej, ja teraz używać ...

$ pip install --user <package-name> 

lub, jeśli działa na zasadzie pip plik wymagań ...

$ pip install --user -r requirements.txt 

i działają niezawodnie dla każdej instalacji pipowej, w tym tworzenia środowisk wirtualnych.

jednak najczystsze rozwiązanie w moim dalszych doświadczeń było zainstalować python-virtualenv i virtualenvwrapper z sudo apt-get install na poziomie systemowym.

Następnie wewnątrz środowisk wirtualnych, użyj pip install bez --user flagą I bez sudo. Znacznie czystsze, bezpieczniejsze i ogólnie łatwiejsze.

+0

Zaoszczędziłeś tyle czasu i wysiłku, dzięki –

4

Użytkownik nie ma uprawnień do zapisu dla niektórych ścieżek instalacji Pythona. Możesz dać pozwolenie przez:

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

Więc należy wyrazić zgodę, a następnie spróbuj zainstalować go ponownie, jeśli masz nowe ścieżki należy również wyrazić zgodę:

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

Dlaczego to zostało odrzucone? To właściwa odpowiedź. – Clintm

+1

Dla pytona zainstalowanego z naparem, jest to właściwa odpowiedź, ponieważ brew utrzymuje pakiety jako użytkownik lokalny (bez roota). – idbrii

0

spróbuj sudo su polecenia, jeżeli używasz Ubuntu, a następnie uruchamiasz pip install jako superużytkownik .. to może pomóc. Miałem ten sam problem i został rozwiązany z tego powodu ..

Jeśli jesteś w systemie, spróbuj uruchomić polecenie pip install, uruchamiając polecenie prompt (cmd) jako admin!

0

Tylko ta komenda pracował dla mnie, w przypadku ktoś ma ten sam problem:

sudo -H/usr/local/bin/PIP zainstalować --upgrade boto3

Powiązane problemy