2015-11-25 5 views
5

Wenn ich pip benutze funktioniert es normalerweise nicht ohne sudo. Ich sehe oft, dass Leute Pip ohne Sudo benutzen, also was mache ich falsch?Warum kann ich einige Dinge nicht ohne Sudo mit Python und Pip machen?

Ich habe gelesen, dass es nicht empfohlen wird, Pip-Pakete mit Sudo zu installieren. Ich weiß, dass ich mit virtualenv Pip ohne Sudo verwenden kann, aber virtualenv installieren muss ich Sudo zuerst verwenden.

Wenn ich versuche, pip ohne sudo zu installieren, erhalte ich:

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/pip' 

Wenn Kolben mit pip3 install flask zu installieren versuchen:

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/werkzeug' 
+3

Ich vermute, du bist auf Linux/Unix/Variante der gleichen. Dies ist nicht die Art, es dort zu tun. Ich schlage vor, Sie lesen auf ['virtualenv'] (http://docs.python-guide.org/en/latest/dev/virtualenvs/). Es besteht eine große Chance, dass Sie Ihre Systeminstallation von Python durcheinander bringen. – Manhattan

+2

Grundsätzlich 'pip install --user package-name', der Ihr Paket in' $ HOME/.local/lib/pythonx.y/site-packages/'setzt. Siehe http: // stackoverflow.com/questions/7143077/how-can-i-install-packages-in-mein-haus-ordner-mit-pip – gongzhitaao

Antwort

6

sudo wird in Unix/Linux-Systemen verwendet, um Aufgaben als ein anderer Benutzer auszuführen, mit ihre Berechtigungen, wie die Fähigkeit, in bestimmte Verzeichnisse zu schreiben. Wenn Sie nicht angeben, um den Benutzer zu emulieren, wie wenn

sudo pip install flask 

laufen Sie versuchen, den Befehl als Systemadministrator ausgeführt werden, wie root in vielen Umgebungen bekannt. Sie werden nach dem Administratorkennwort gefragt (das kann Ihr eigenes sein, wenn Sie Ihrem Benutzer Administratorrechte erteilt haben), dann führt der angegebene Befehl als Benutzer aus, was bedeutet, dass er im Wesentlichen auf jede Datei Lese-/Schreibzugriff hat und Verzeichnis auf dem System (es gibt einige Ausnahmen, aber sie sind meistens Eckfälle und nicht sehr wichtig hier). Das bedeutet, dass Sie besonders vorsichtig wenn sudo Verwendung als Fehler so klein wie ein einzelner Raum sein müssen, kann wirklich durcheinander zu bringen:

sudo rm -rf /usr/local/lib/python3.4/dist-packages/numpy* 

mit

sudo rm -rf /usr /local/lib/python3.4/dist-packages/numpy* 

sehen, dass der Raum zwischen vergleichen /usr und ? Sie haben gerade damit begonnen, den gesamten Ordner /usr zu löschen, der einen großen Teil der wichtigen Dateien und Programme auf dem System enthält. Hoffe, du hast ein Backup! Nun, das bedeutet nicht, dass Sie Angst vor dem Tod von sudo haben müssen, aber Sie tun müssen einen gesunden Respekt dafür haben.

Python-Installationen sind in der Regel auf Systemebene sein (ja, ich weiß, es gibt Ausnahmen), was bedeutet, dass Sie sudo verwenden müssen, um sie zu ändern, etwa wenn sie mit pip 3rd-Party-Module installieren. Wenn Sie

ls -l /usr/local/lib/python3.4 

laufen werden Sie etwas entlang der Linien von

drwxrwsr-x 125 root 4096 Nov 3 00:40 dist-packages 

zeigt, dass das Verzeichnis Sie versuchen zu installieren, um mit pip von root gehört, so dass die Verwendung von sudo ist notwendig.

Jetzt gibt es eine Reihe von Möglichkeiten. Wenn Sie damit vertraut sind und die globalen Pakete des Systems nicht ändern möchten, gehen Sie voran und verwenden Sie sudo mit pip (in der Tat müssen Sie möglicherweise sudo -H ... verwenden, wenn Sie am Anfang eine kleine Nachricht in gelb über Berechtigungen in erhalten Ihr Heimatverzeichnis). Alle Module werden unter /usr/local/lib/python3.4/dist-packages installiert und stehen allen Benutzern auf dem System zur Verfügung.

Die zweite Option ist --user Option Pip zu verwenden, die eine lib/python3.4/site-packages Hierarchie in Ihrem Home-Verzeichnis wird (~) und speichern Sie alle dort installierten Module, zusammen mit Skripten in ~/bin (die Sie Ihren $PATH hinzufügen sollten. Der Vorteil von dieser Methode ist, dass Sie nichtsudo verwenden müssen, damit Sie nicht versehentlich systemabhängige Module überschreiben, in denen bestimmte Versionen für andere Programme erforderlich sind, der Nachteil ist, dass die installierten Module nur für Sie verfügbar sind , so dass Sie können Probleme auftreten, wenn zum Beispiel Ihr Webserver versucht, Flask als selbst auszuführen, und kann nicht die Quelldateien lesen has ist nichts, was ein wenig config file-editing nicht beheben kann. Dies ist meine empfohlene Lösung für die meisten Benutzer. Die dritte Option besteht in der Verwendung von virtuellen Umgebungen wie virtualenv. Dadurch wird eine benutzerdefinierte Python-Installation an dem von Ihnen gewählten Speicherort mit einer separatenpython ausführbaren Hierarchie und site-packages Hierarchie erstellt (es gibt Optionen, ob Sie mit dem Repository des Systems dist-packages verknüpfen oder dieses verwenden möchten). Sie können pip install Pakete direkt in die virtualenv, und machen Sie so viele Umgebungen wie Ihr kleines Herz begehrt, jeder mit leicht unterschiedlichen Versionen der verschiedenen Abhängigkeiten, zum Beispiel, so dass Sie Ihre Programme robuster testen können. Sie können die virtuellen Umgebungen ein- und ausschalten, sodass Sie zum Beispiel mehrere in verschiedenen Registerkarten von Terminal ausführen können, um beispielsweise Dinge parallel zu testen. Dies ist eine naheliegende Empfehlung an zweiter Stelle, da die Aktivierung und Nutzung der Umgebungen (etwas) mehr Arbeit erfordert, und Sie können sich darüber irritieren, in welcher Sie arbeiten, wenn Sie nicht sehr gut darin sind, sie zu benennen. Nachteile sind die fehlende systemweite Verfügbarkeit, wie die zweite Option, und die Tatsache, dass die virtuelle Umgebung vor der Verwendung manuell aktiviert werden muss.

Werfen Sie einen Blick auf die Optionen und sehen Sie, welche für Ihr System und Ihre Situation am besten geeignet ist. Viel Glück!

+0

Große Erklärung, sehr nützlich und leicht zu verstehen. Danke vielmals. –

8

Der Grund dafür ist, dass Ihre regelmäßigen Benutzer nicht über die Berechtigungen zum Ändern der Systemverzeichnisse erforderlich. Genau wie in dieser Nachricht:

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/pip' 

Hier ist ein kurzer Überblick von dem, was Sie wissen müssen:

Ihr System Python installiert ist, um das System der Python ändern Sie sudo verwenden oder sein die Root-Benutzer.

Sie können Python-Bibliotheken in Ihrem Home-Verzeichnis installieren, ohne Sudo zu verwenden, aber nur Sie (nicht andere Benutzer des Systems) können es verwenden. Tun Sie dies mit pip install --user package-name wie gongzhitaao erwähnt.

Sie können auch einzigartige Installationen von Python in einem Verzeichnis Ihrer Wahl erstellen, wie The Laughing Man erwähnt. Dies nennt sich virtualenv, und ich denke, das ist die am meisten bevorzugte Art zu arbeiten.

+0

Vielen Dank für die Hilfe! Ich verstehe es. –

Verwandte Themen