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.
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
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)
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"
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_point
dans le fichier setup.py
:
entry_points = {'console_scripts':
['YOUR_CONSOLE_COMMAND=MODULE_NAME.FILE_NAME:FUNCTION_NAME'],},
Sous Windows, vous devez ajouter le chemin "% USERPROFILE%\AppData\Roaming\Python\Scripts" à votre chemin.
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/