it-swarm.com.de

pip install -r: OSError: [Errno 13] Berechtigung verweigert

Ich versuche, Django einzurichten. 

Beim Ausführen von pip install -r requirements.txt erhalte ich die folgende Ausnahme:

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'

Was ist los und wie kann ich das beheben?

92
RunLoop

Option a) Erstellen Sie eine Virtualenv, aktivieren Sie sie und installieren Sie:

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

Option b) Installieren Sie in Ihrem Homedir:

pip install --user -r requirements.txt

Meine Empfehlung verwenden Sie die Option safe (a), damit die Anforderungen dieses Projekts nicht die Anforderungen anderer Projekte beeinträchtigen.

50
hectorcanto

Wir sollten aufhören, die Verwendung von Sudo mit pip install zu empfehlen. Es ist besser, zuerst pip install --user auszuprobieren. Wenn dies fehlschlägt, werfen Sie einen Blick auf den oberen Beitrag hier .

Der Grund, aus dem Sie Sudo nicht verwenden sollten, lautet wie folgt:

Wenn Sie pip mit Sudo ausführen, führen Sie als Root-Benutzer beliebigen Python-Code aus dem Internet aus, was ein großes Sicherheitsrisiko darstellt. Wenn jemand ein schädliches Projekt auf PyPI erstellt und Sie es installieren, geben Sie einem Angreifer Root-Zugriff auf Ihren Computer.

283
bert

Ich kläre einfach, was für mich nach vielen Schmerzen in Linux (basierend auf Ubuntu) auf Erlaubnis verweigerte Fehler funktionierte, und nutze Berts Antwort oben.

$ pip install --user <package-name>

oder wenn pip auf einer Anforderungsdatei läuft ...

$ pip install --user -r requirements.txt

diese funktionieren zuverlässig für jede Pip-Installation, einschließlich der Erstellung virtueller Umgebungen.

Die sauberste Lösung in meiner weiteren Erfahrung war jedoch, python-virtualenv und virtualenvwrapper mit Sudo apt-get install auf Systemebene zu installieren. 

Verwenden Sie dann in virtuellen Umgebungen pip install ohne --user-Flag UND ohne Sudo. Insgesamt viel sauberer, sicherer und einfacher.

24
Thom Ives

Sie versuchen, ein Paket im systemweiten Pfad zu installieren, ohne die Berechtigung dazu zu haben.

  1. Im Allgemeinen können Sie Sudo verwenden, um vorübergehend superuser Berechtigungen in Ihrer Verantwortung zu erhalten, um das Paket im systemweiten Pfad zu installieren:

    Sudo pip install -r requirements.txt
    

    Mehr über Sudohier erfahren.

  2. Wenn Sie keine systemweiten Änderungen vornehmen möchten, können Sie das Paket unter Verwendung des Kennzeichens --user im Pfad per-user installieren.

    Alles was es braucht ist:

    pip install --user runloop requirements.txt
    
  3. Schließlich kann für noch feinere Steuerung auch ein virtualenv verwendet werden. Dies ist möglicherweise die überlegene Lösung für eine Entwicklungsumgebung, insbesondere wenn Sie an mehreren Projekten arbeiten und möchten die Abhängigkeiten jedes Einzelnen nachverfolgen.

    Nach der Aktivierung Ihrer Virtualenv mit

    $ my-virtualenv/bin/activate

    der folgende Befehl installiert das Paket in der virtuellen Umgebung (und nicht im systemweiten Pfad):

    pip install -r requirements.txt

23
Tobia Tesan

Der Benutzer hat keine Schreibberechtigung für einige Python-Installationspfade. Sie können die Erlaubnis geben durch:

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

Sie sollten also die Erlaubnis geben und dann versuchen, es erneut zu installieren. Wenn Sie neue Pfade haben, sollten Sie auch die Erlaubnis geben:

Sudo chown -R $USER /usr/local/lib/python2.7/
6
Mesut GÜNEŞ

Also habe ich genau diesen Fehler aus einem ganz anderen Grund bekommen. Aufgrund eines völlig separaten, aber bekannten Homebrew + pip-Fehlers war ich dieser Problemumgehung gefolgt in den Hilfedokumenten von Google Cloud aufgeführt, in denen Sie eine .pydistutils.cfg-Datei in Ihrem Home-Verzeichnis erstellen. Diese Datei hat eine spezielle Konfiguration, die Sie nur für die Installation bestimmter Bibliotheken verwenden sollten. Ich hätte die disutils.cfg-Datei nach der Installation der Pakete entfernen sollen, habe aber vergessen, dies zu tun. Also war der Fix für mich eigentlich nur ...

rm ~/.pydistutils.cfg

Und dann hat alles normal funktioniert. Wenn Sie in dieser Datei aus einem echten Grund etwas Konfiguration haben, möchten Sie diese Datei natürlich nicht direkt ausführen. Falls jedoch jemand anderes diese Problemumgehung durchführte und vergaß, diese Datei zu entfernen, war dies für mich der Trick!

0
bwest87