webentwicklung-frage-antwort-db.com.de

pip installiert Pakete erfolgreich, aber ausführbare Dateien werden nicht über die Befehlszeile gefunden

Ich arbeite an Mac OS X Yosemite, Version 10.10.3.

Ich habe python2.7 und pip mit macport installiert, wie in http://johnlaudun.org/20150512-installing-and-setting-pip-with-macports/

Ich kann Pakete erfolgreich installieren und in meine Python-Umgebung und meine Python-Skripts importieren. Eine mit einem Paket verknüpfte ausführbare Datei, die von der Befehlszeile im Terminal aus aufgerufen werden kann, wird jedoch nicht gefunden.

Weiß jemand was falsch ist? (Weitere Details unten)

Zum Beispiel während der Installation eines Pakets mit dem Namen "rosdep" wie unter http://wiki.ros.org/jade/Installation/Source beschrieben.

Ich kann Folgendes ausführen: Sudo pip install -U rosdep Die Installation erfolgt ohne Fehler. Die entsprechenden Dateien befinden sich in /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages.

Wenn ich jedoch versuche, Folgendes auszuführen: Sudo rosdep init, Gibt es einen Fehler: "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 innerhalb von Python einwandfrei funktionieren.

47
Sanket_Diwale

Überprüfen Sie Ihren $ PATH

tox hat einen Befehlszeilenmodus: 

audrey:tests jluc$ pip list | grep tox
tox (2.3.1)

wo ist es?

audrey:tests jluc$ which tox
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/tox

und was ist in meinem $ PFAD? 

audrey:tests jluc$ echo $PATH
/opt/chefdk/bin:/opt/chefdk/embedded/bin:/opt/local/bin:..../opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin...

Beachten Sie die /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin ? Das ist es, was meine Pip-installierten Sachen finden kann

Um zu sehen, wo Dinge von Python sind, versuchen Sie dies (ersetzen Sie rosdep für tox).

$python
>>> import tox
>>> tox.__file__

das druckt aus:

'/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/tox/__init__.pyc'

Nun, cd in das Verzeichnis rechts oben lib oben. Sehen Sie ein bin Verzeichnis? Sehen Sie rosdep in dieser Ablage? Wenn ja, versuchen Sie, die bin zu Ihrem $ PATH hinzuzufügen.

audrey:2.7 jluc$ cd /opt/local/Library/Frameworks/Python.framework/Versions/2.7
audrey:2.7 jluc$ ls -1

ausgabe:

Headers
Python
Resources
bin
include
lib
man
share
24
JL Peyret

Bei macOS mit der Standard-Python-Installation müssen Sie /Users/<you>/Library/Python/2.7/bin/ zu Ihrem $ PATH hinzufügen.

Fügen Sie dies zu Ihrem .bash_profile hinzu:

export PATH="/Users/<you>/Library/Python/2.7/bin:$PATH"

Dort installiert pip die ausführbaren Dateien.

Tipp: Für die nicht standardmäßige Python-Version which python suchen Sie den Ort Ihrer Python-Installation und ersetzen Sie diesen Abschnitt im obigen Pfad. (Danke für den Hinweis Sanket_Diwale)

26
joh-mue

Wenn Sie mit --user (z. B. pip3.6 install --user tmuxp) installieren, ist es möglich, das plattformspezifische Installationsverzeichnis für Benutzer von Python selbst zu erhalten, indem Sie das Modul site verwenden. Zum Beispiel unter macOS:

$ python2.7 -m site --user-base
/Users/alexp/Library/Python/2.7

Durch das Anhängen von /bin haben wir jetzt den Pfad, unter dem ausführbare Paketdateien installiert werden. Wir können den PFAD in der RC-Datei Ihrer Shell basierend auf der Ausgabe dynamisch auffüllen. Ich benutze bash, aber mit etwas Glück ist das portabel:

# Add Python bin directories to path
python3.6 -m site &> /dev/null && PATH="$PATH:`python3.6 -m site --user-base`/bin"
python2.7 -m site &> /dev/null && PATH="$PATH:`python2.7 -m site --user-base`/bin"

Ich verwende die genauen Python-Versionen, um die Wahrscheinlichkeit zu verringern, dass die ausführbaren Dateien "verschwinden", wenn Python eine untergeordnete Version aktualisiert, z. von 3,5 bis 3,6. Sie verschwinden, da der Benutzerinstallationspfad, wie oben zu sehen, die Python-Version enthalten kann. Während python3 auf 3.5 oder 3.6 verweisen konnte, wird python3.6 immer auf 3.6 zeigen. Dies ist zu beachten, wenn Sie weitere Pakete installieren, z. Verwenden Sie pip3.6 über pip3.

Wenn Sie nichts dagegen haben, dass Pakete verschwinden, können Sie stattdessen python2 und python3 verwenden:

# Add Python bin directories to path
# Note: When Python is upgraded, packages may need to be re-installed
#       or Python versions managed.
python3 -m site &> /dev/null && PATH="$PATH:`python3 -m site --user-base`/bin"
python2 -m site &> /dev/null && PATH="$PATH:`python2 -m site --user-base`/bin"
18
Alex Palmer

Ich bin über diese Frage gestolpert, weil ich ein PyPI-Paket erstellt, erfolgreich erstellt und veröffentlicht habe, es aber nach der Installation nicht ausführen konnte. Die Variable $PATH wurde korrekt festgelegt.

In meinem Fall bestand das Problem darin, dass ich den entry_point nicht in der setup.py-Datei festgelegt hatte:

entry_points = {'console_scripts':

['YOUR_CONSOLE_COMMAND=MODULE_NAME.FILE_NAME:FUNCTION_NAME'],},

Unter Windows müssen Sie den Pfad "% USERPROFILE%\AppData\Roaming\Python\Scripts" zu Ihrem Pfad hinzufügen.

1
Jared Beach

Zusätzlich zum Hinzufügen des bin -Verzeichnisses von Python zur $PATH -Variable musste ich auch den Eigentümer dieses Verzeichnisses ändern, damit es funktioniert. Keine Ahnung, warum ich nicht schon der Besitzer war.

chown -R ~/Library/Python/
0
d4Rk