Ich versuche, ein Python-Paket mit pip
in einer virtuellen Umgebung auf einem Ubuntu-Computer bereitzustellen, stoße jedoch auf ein Problem mit Berechtigungen. Beispielsweise:
(TestVirtualEnv)test@testServer:~$ pip install markdown2
endet durch:
Fehler: '/home/test/virtualenvs/TestVirtualEnv/lib/python3.3/site-packages/markdown2.py' konnte nicht erstellt werden: Berechtigung verweigert
Ich kann nicht sudo
, da das Paket global und nicht in der virtuellen Umgebung installiert wird. Ich chown
ed site-packages
; ls
zeigt nur Verzeichnisse an easy_install
, die sich auf pip
und setuptools
beziehen, und nichts, das sich auf Markdown bezieht.
Wie kann ich ein Paket in einer virtuellen Umgebung bereitstellen, pip
ohne dass berechtigungsbezogene Fehler auftreten?
python
virtualenv
pip
Arseni Mourzenko
quelle
quelle
sudo
?sudo
.sudo
. In der Tat wird das Paket jetzt korrekt installiert. Können Sie Ihren Kommentar zu einer Antwort bewerben, damit ich ihn akzeptieren kann?virtualenv
Verzeichnis besitzt (oder über Schreibzugriff verfügt) , da Sievirtualenv
mit anderen Benutzern aktivieren können , Sie jedoch keine Pakete installieren können und Berechtigungszugriff gewähren.Antworten:
virtualenv
Berechtigungsprobleme können auftreten, wenn Sie dasvirtualenv
as erstellensudo
und dann ohnesudo
im arbeitenvirtualenv
.Wie in Ihrer Frage Kommentar fand heraus, hier ist die Lösung zu schaffen das
virtualenv
ohnesudo
zu können , arbeiten ohne (insb. Write) darinsudo
.quelle
virtualenv
ich das ohne Sudo?sudo
, lesen Sie die Antwort von @vingtoft, um zu erfahren, wie Sie sie einfach beheben können, ohne sie neu zu erstellenLösung:
Wenn Sie die virtuelle Umgebung als root erstellt haben, führen Sie den folgenden Befehl aus:
Dies wird wahrscheinlich Ihr Problem beheben.
Prost
quelle
In meinem Fall habe ich verwendet
mkvirtualenv
, aber nicht gesagt, dass ich Python3 verwenden würde. Ich habe diesen Fehler erhalten:Es funktionierte nach Angabe von python3:
quelle
Ich habe meine virtuelle Umgebung nicht mit sudo erstellt. Also traf Sebastians Antwort nicht auf mich. Mein Projekt heißt
utils
. Ich habe dasutils
Verzeichnis überprüft und Folgendes gesehen:Wie Sie sehen können,
utils.egg-info
gehörtroot
nichtmacuser
. Deshalb gab es mirpermission denied
Fehler. Ich musste auch entfernen,/Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-link
da es auch von erstellt wurderoot
.pip install -e .
Nachdem ich diese entfernt hatte, tat ich es erneut und es funktionierte.quelle
Wenn Sie eine virtuelle Umgebung mit root erstellt haben, verwenden Sie diesen Befehl
Sie erhalten den Root-Zugriff und können dann Ihre virtuelle Umgebung damit aktivieren
quelle
Sie haben die virtuelle Umgebung vor der Verwendung von pip nicht aktiviert .
Probieren Sie es aus mit:
Verwenden Sie dann pip -r require.txt für Ihren Hauptordner
quelle
Ich habe dies auch (aus Versehen) erlebt, nachdem ich in einer vorhandenen virtuellen Umgebung ein neues Venv erstellt habe. Eine einfache Möglichkeit, dies zu diagnostizieren, besteht darin, zu sehen, wo die
python
Verknüpfung besteht, dh ausführen:und stellen Sie sicher, dass es auf die entsprechende Python-Binärdatei zeigt. Für die meisten Systeme ist dies
/usr/bin/python
oder/usr/bin/python3
. Wenn es auf eine vorhandene virtuelle Umgebung verweist, ist es so etwas wie/home/youruser/somedir/bin/python
. Wenn es das letztere ist, würde ich vorschlagen, das Venv neu zu erstellen und gleichzeitig sicherzustellen, dass Sie sich nicht in einem vorhandenen virtuellen Netzwerk befinden (dh ausführendeactivate
).quelle
Wenn Sie beim Erstellen von virtualenv sudo verwenden, wird das Verzeichnis mit Root-Rechten erstellt. Wenn Sie also versuchen, ein Paket mit einem Nicht-sudo-Benutzer zu installieren, haben Sie keine Berechtigung, es zu installieren. Erstellen Sie also immer virtualenv ohne sudo und installieren Sie es ohne sudo.
Sie können auch auf global python installierte Pakete nach virtualenv kopieren.
quelle