Ich arbeite an Mac OS X Yosemite, Version 10.10.3.
Ich habe Python2.7 und Pip mithilfe von Macport installiert, wie in http://johnlaudun.org/20150512-installing-and-setting-pip-with-macports/ beschrieben.
Ich kann Pakete erfolgreich installieren und in meine Python-Umgebung und Python-Skripte importieren. Eine mit einem Paket verknüpfte ausführbare Datei, die über die Befehlszeile im Terminal aufgerufen werden kann, wird jedoch nicht gefunden.
Weiß jemand, was falsch sein könnte? (Weitere Details unten)
Zum Beispiel während der Installation eines Pakets namens "rosdep", wie in http://wiki.ros.org/jade/Installation/Source beschrieben
Ich kann ausführen: sudo pip install -U rosdep
welche fehlerfrei installiert wird und entsprechende Dateien sich in befinden/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
Wenn ich jedoch versuche,: auszuführen sudo rosdep init
, wird ein Fehler ausgegeben:"sudo: rosdep: command not found"
Dies ist kein paketspezifischer Fehler. Ich bekomme dies für jedes Paket, das mit pip auf meinem Computer installiert wurde. Ich habe sogar versucht hinzuzufügen
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
zu meinem $PATH
. Die ausführbaren Dateien werden jedoch nicht in der Befehlszeile gefunden, obwohl die Pakete in Python einwandfrei funktionieren.
Antworten:
Überprüfen Sie Ihren $ PATH
tox
hat einen Befehlszeilenmodus:wo ist es?
(edit: das
2.7
Zeug spielt hier keine große Rolle, sub in any3.x
und pip verhält sich ziemlich gleich)und was ist in meinem $ PATH?
Beachten Sie die Datei /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin ? Das ist es, was es mir ermöglicht, meine mit Pip installierten Sachen zu finden
Nun, um zu sehen , wo die Dinge aus Python sind, versucht , dies zu tun (Ersatz
rosdep
fürtox
).das druckt aus:
Nun cd in das Verzeichnis , rechts oben
lib
in der oben. Sehen Sie ein bin- Verzeichnis? Sehen Sierosdep
in diesem Mülleimer? Wenn ja, fügen Sie dasbin
zu Ihrem $ PATH hinzu.Ausgabe:
quelle
rosdep
stimmt mit Ihrem Problem überein. Mein Punkt ist, dass Sie herausfinden müssen, wo dasrosdep
installiert ist und wie $ PATH aussieht.which
(wenn es noch nicht in Ihrem Pfad ist), können Sie auch versuchen, die Binärdatei untermlocate
Linux odermdfind
MacOS zu finden.Unter macOS mit der Standard-Python-Installation müssen Sie
/Users/<you>/Library/Python/2.7/bin/
Ihrem $ PATH hinzufügen .Fügen Sie dies Ihrem .bash_profile hinzu:
Dort installiert pip die ausführbaren Dateien.
Tipp: Bei einer nicht standardmäßigen Python-Version können
which python
Sie den Speicherort Ihrer Python-Installation ermitteln und diesen Teil im obigen Pfad ersetzen. (Danke für den Hinweis Sanket_Diwale)quelle
which python3
führte mich die Installation von Python 3.6 von python.org schließlich (über einen Link) zu/Library/Frameworks/Python.framework/Versions/3.6/bin/
.Wenn Sie mit
--user
(z. B.pip3.6 install --user tmuxp
) installieren , ist es möglich, das plattformspezifische Benutzerinstallationsverzeichnis mithilfe dessite
Moduls von Python selbst abzurufen . Zum Beispiel unter macOS:Durch Anhängen
/bin
haben wir jetzt den Pfad, in dem ausführbare Paketdateien installiert werden. Wir können den PATH basierend auf der Ausgabe dynamisch in die RC-Datei Ihrer Shell einfügen. Ich benutze Bash, aber mit etwas Glück ist dies portabel:Ich verwende die genauen Python-Versionen, um die Wahrscheinlichkeit zu verringern, dass die ausführbaren Dateien nur "verschwinden", wenn Python eine Nebenversion aktualisiert, z. B. von 3.5 auf 3.6. Sie verschwinden, da der Benutzerinstallationspfad, wie oben zu sehen, möglicherweise die Python-Version enthält. Während also
python3
auf 3.5 oder 3.6 zeigen könnte,python3.6
wird immer auf 3.6 zeigen. Dies muss bei der Installation weiterer Pakete berücksichtigt werden, z . B. bei Verwendungpip3.6
überpip3
.Wenn Sie nicht die Idee der Pakete verschwindenden ausmacht, können Sie verwenden
python2
undpython3
stattdessen:quelle
Ich weiß, dass die Frage nach macOS gestellt wird, aber hier ist eine Lösung für Linux- Benutzer, die über Google hierher kommen.
Ich hatte das in dieser Frage beschriebene Problem, nachdem ich das pdfx- Paket über pip installiert hatte .
Als ich es jedoch lief, nichts ...
Noch:
Das Problem unter Linux ist, dass
pip install ...
Skripte abgelegt werden~/.local/bin
und dies nicht auf dem Standard-Debian / Ubuntu ist$PATH
.Hier ist ein GitHub-Problem, das ausführlicher beschrieben wird: https://github.com/pypa/pip/issues/3813
Zum Beheben fügen
~/.local/bin
Sie einfach Ihre hinzu$PATH
, indem Sie beispielsweise die folgende Zeile zu Ihrer.bashrc
Datei hinzufügen :Starten Sie danach Ihre Shell neu und die Dinge sollten wie erwartet funktionieren.
quelle
source ~/.bashrc
die.bashrc
Konfiguration neu ladenUnter Windows müssen Sie den Pfad
%USERPROFILE%\AppData\Roaming\Python\Scripts
zu Ihrem Pfad hinzufügen .quelle
Lösung
Basierend auf anderen Antworten können Sie für
linux
undmac
Folgendes ausführen:statt
python3
Sie eine andere Verbindung zu Python - Version verwenden können:python
,python2.7
,python3.6
,python3.9
, usw.Erläuterung
Um zu wissen, wo die Benutzerpakete im aktuellen Betriebssystem (Win, Mac, Linux) installiert sind, führen wir Folgendes aus:
Wir wissen, dass die Skripte in den
bin/
Ordner verschoben werden , in dem die Pakete installiert sind.Also verketten wir die Pfade:
Dann exportieren wir das in eine Umgebungsvariable.
Um zu vermeiden, dass der Exportbefehl wiederholt wird, fügen wir ihn unserer
.bashrc
Datei hinzu undsource
führen die neuen Änderungen aus. Dabei erhalten wir die am Anfang erwähnte Lösungsvorschläge.quelle
Ich bin auf diese Frage gestoßen, weil ich ein PyPI-Paket erstellt, erfolgreich erstellt und veröffentlicht habe, es aber nach der Installation nicht ausführen konnte. Die
$PATH
Variable wurde korrekt eingestellt.In meinem Fall war das Problem, dass ich das
entry_point
in dersetup.py
Datei nicht festgelegt hatte :quelle
Zusätzlich zum Hinzufügen des Python-
bin
Verzeichnisses zur$PATH
Variablen musste ich auch den Eigentümer dieses Verzeichnisses ändern, damit es funktioniert. Keine Ahnung, warum ich nicht schon der Besitzer war.quelle