web-dev-qa-db-fra.com

pip installe les packages avec succès, mais les exécutables sont introuvables à partir de la ligne de commande

Je travaille sur Mac OS X Yosemite, version 10.10.3.

J'ai installé python2.7 et pip en utilisant macport comme dans la méthode http://johnlaudun.org/20150512-installing-and-setting-pip-with-macports/

Je peux installer avec succès des packages et les importer dans mon environnement python et mes scripts python. Toutefois, aucun fichier exécutable associé à un package pouvant être appelé à partir de la ligne de commande du terminal est introuvable.

Est-ce que quelqu'un sait ce qui pourrait être mauvais? (Plus de détails ci-dessous)

Par exemple, lors de l'installation d'un paquet appelé "rosdep" comme indiqué dans http://wiki.ros.org/jade/Installation/Source

Je peux exécuter: Sudo pip install -U rosdep Qui installe sans erreurs et les fichiers correspondants sont situés dans /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

Cependant, si j’essaie d’exécuter: Sudo rosdep init, , Cela donne une erreur: "Sudo: rosdep: command not found"

Ce n'est pas une erreur spécifique au paquet. Je l’obtiens pour tous les paquets installés à l’aide de pip sur mon ordinateur. J'ai même essayé d'ajouter 

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

à mon $PATH. Mais les exécutables ne sont pas trouvés sur la ligne de commande, même si les paquetages fonctionnent parfaitement à partir de python.

47
Sanket_Diwale

vérifiez votre $ PATH

tox a un mode ligne de commande: 

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

où est-ce?

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

et ce qui est dans mon $ PATH? 

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...

Notez le /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin ? C'est ce qui permet de trouver mon matériel installé par pip

Maintenant, pour voir où sont les choses depuis Python, essayez ceci (remplacez rosdep par tox).

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

qui imprime:

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

Maintenant, cd dans le répertoire juste au dessus de lib ci-dessus. Voyez-vous un répertoire bin ? Voyez-vous rosdep dans cette corbeille? Si c'est le cas, essayez d'ajouter bin à votre $ PATH.

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

sortie:

Headers
Python
Resources
bin
include
lib
man
share
24
JL Peyret

Sur macOS avec l'installation python par défaut, vous devez ajouter /Users/<you>/Library/Python/2.7/bin/ à votre $ PATH.

Ajoutez ceci à votre .bash_profile:

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

C'est là que pip installe les exécutables.

Conseil: Pour la version python non définie par défaut which python, recherchez l'emplacement de votre installation python et remplacez cette partie dans le chemin ci-dessus. (Merci pour l'indice Sanket_Diwale)

26
joh-mue

Si vous installez à l'aide de --user (par exemple, pip3.6 install --user tmuxp), il est possible d'obtenir le répertoire d'installation de l'utilisateur spécifique à la plate-forme à partir de Python lui-même à l'aide du module site . Par exemple, sur macOS:

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

En ajoutant /bin à cela, nous avons maintenant le chemin où les exécutables du paquet seront installés. Nous pouvons renseigner dynamiquement le PATH dans le fichier rc de votre shell en fonction de la sortie. J'utilise bash, mais avec un peu de chance, c'est portable:

# 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"

J'utilise les versions précises de Python pour réduire le risque de "disparition" des exécutables lorsque Python met à niveau une version mineure, par exemple. de 3,5 à 3,6. Ils vont disparaître car, comme on peut le voir ci-dessus, le chemin d'installation de l'utilisateur peut inclure la version Python. Ainsi, alors que python3 pourrait pointer sur 3.5 ou 3.6, python3.6 pointera toujours sur 3.6. Ceci doit être pris en compte lors de l’installation de nouveaux packages, par exemple. utilisez pip3.6 sur pip3.

Si l'idée de la disparition des paquets ne vous dérange pas, vous pouvez utiliser python2 et python3 à la place:

# 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

Je suis tombé sur cette question parce que j'ai créé, construit et publié avec succès un paquet PyPI, mais je ne pouvais pas l'exécuter après l'installation. La variable $PATH a été correctement définie.

Dans mon cas, le problème était que je n'avais pas défini le entry_pointdans le fichier setup.py:

entry_points = {'console_scripts':

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

Sous Windows, vous devez ajouter le chemin "% USERPROFILE%\AppData\Roaming\Python\Scripts" à votre chemin.

1
Jared Beach

En plus d'ajouter le répertoire bin de python à la variable $PATH, je devais également changer le propriétaire de ce répertoire pour le faire fonctionner. Aucune idée pourquoi je n'étais déjà pas le propriétaire.

chown -R ~/Library/Python/
0
d4Rk