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 chown
ed 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?
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
.
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
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.
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
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
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/