wake-up-neo.com

So vermeiden Sie die "Berechtigung verweigert", wenn Sie pip mit virtualenv verwenden

Ich versuche, ein Python-Paket mit pip in einer virtuellen Umgebung auf einem Ubuntu-Computer bereitzustellen, aber ich habe ein Problem mit der Berechtigung. Zum Beispiel:

(TestVirtualEnv)[email protected]:~$ pip install markdown2

endet durch:

fehler: '/home/test/virtualenvs/TestVirtualEnv/lib/python3.3/site-packages/markdown2.py' konnte nicht erstellt werden: Berechtigung abgelehnt

Ich kann keine Sudo, da das Paket global und nicht innerhalb der virtuellen Umgebung installiert wird. Ich chowned site-packages; ls zeigt nur Verzeichnisse an, die sich auf easy_install, pip und setuptools beziehen, und nichts, was Markdown betrifft.

Wie kann ein Paket in einer virtuellen Umgebung mit pip bereitgestellt werden, ohne dass Fehler in Zusammenhang mit der Berechtigung auftreten?

73

virtualenv Berechtigungsprobleme können auftreten, wenn Sie virtualenv als Sudo erstellen und dann ohne Sudo in virtualenv arbeiten.

Wie im Kommentar Ihrer Frage festgestellt, besteht die Lösung darin, create der virtualenv ohne Sudo in der Lage zu sein, work (esp.) Schreiben zu können ohne Sudo.

80
sebastian_oe

Lösung:

Wenn Sie die virtualenv als root erstellt haben, führen Sie den folgenden Befehl aus:

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

Dies wird wahrscheinlich Ihr Problem beheben.

Prost

72
Vingtoft

Ich habe meine Virtualenv nicht mit Sudo erstellt. Sebastians Antwort traf also nicht auf mich zu. Mein Projekt heißt utils. Ich habe das utils-Verzeichnis geprüft und folgendes gesehen:

-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

Wie Sie sehen, gehört utils.Egg-info zu root und nicht macuser. Deshalb gab es einen permission denied-Fehler. Ich musste auch /Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.Egg-link entfernen, da er ebenfalls von root erstellt wurde. Ich habe pip install -e . wieder gemacht, nachdem ich diese entfernt hatte, und es hat funktioniert.

4
AliBZ

In meinem Fall benutzte ich mkvirtualenv, sagte aber nicht, dass ich Python3 verwenden würde. Ich habe diesen Fehler erhalten:

mkvirtualenv hug
pip3 install hug -U

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

Nach der Angabe von python3 hat es funktioniert:

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

Sie haben die virtuelle Umgebung nicht aktiviert , bevor Sie pip verwenden.

Versuchen Sie es mit: 

$(your venv path) . bin/activate

Und dann verwenden Sie pip -r Requirements.txt in Ihrem Hauptordner

0
jmrueda

Wenn Sie bei der Erstellung von Virtualenv Sudo verwenden, wird das Verzeichnis mit Root-Berechtigungen erstellt. Wenn Sie also versuchen, ein Paket mit einem Nicht-Sudo-Benutzer zu installieren, haben Sie keine Berechtigung für die Installation darin. So erstellen Sie Virtualenv immer ohne Sudo und installieren ohne Sudo.

Sie können auch auf globalem Python installierte Pakete nach virtualenv kopieren. 

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