pip instala los paquetes con éxito, pero los ejecutables no se encuentran desde la línea de comandos

Estoy trabajando en mac OS X Yosemite, versión 10.10.3.

Instalé python2.7 y pip usando macport como se hace en http://johnlaudun.org/20150512-installing-and-setting-pip-with-macports/

Puedo instalar paquetes con éxito e importarlos dentro de mi entorno de Python y los scripts de Python. Sin embargo, no se encuentra ningún ejecutable asociado con un paquete al que se pueda llamar desde la línea de comandos en el terminal.

¿Alguien sabe qué podría estar mal? (Más detalles abajo)

Por ejemplo, al instalar un paquete llamado “rosdep” como se indica en http://wiki.ros.org/jade/Installation/Source

Puedo ejecutar: sudo pip install -U rosdep que se instala sin errores y los archivos correspondientes se encuentran en /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

Sin embargo, si bash ejecutar: sudo rosdep init , da un error: "sudo: rosdep: command not found"

Esto no es un error específico del paquete. Obtengo esto para cualquier paquete instalado usando pip en mi computadora. Incluso traté de añadir

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

a mi $PATH . Pero los ejecutables no se encuentran en la línea de comando, aunque los paquetes funcionan perfectamente desde Python.

revisa tu $ PATH

tox tiene un modo de línea de comando:

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

¿Dónde está?

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

y que hay en mi $ 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... 

Observe el /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin ? Eso es lo que permite encontrar mis cosas instaladas en pip.

Ahora, para ver dónde están las cosas de Python, intente hacer esto (sustituya rosdep por tox ).

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

que imprime:

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

Ahora, cd al directorio justo arriba de lib en el anterior. ¿Ves un directorio bin ? ¿Ves rosdep en ese cubo? Si es así, intente agregar el bin a su $ PATH.

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

salida:

 Headers Python Resources bin include lib man share 

En macOS con la instalación de python predeterminada, debe agregar /Users//Library/Python/2.7/bin/ a su $ PATH.

Agrega esto a tu .bash_profile:

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

Ahí es donde pip instala los ejecutables.

Sugerencia: para la versión de Python no predeterminada, which python busca la ubicación de su instalación de Python y reemplaza esa parte en la ruta anterior. (Gracias por la pista Sanket_Diwale)

Si realiza la instalación con --user (por ejemplo, pip3.6 install --user tmuxp ), es posible obtener el directorio de instalación del usuario específico de la plataforma desde Python utilizando el módulo del site . Por ejemplo, en macOS:

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

Al agregar /bin a esto, ahora tenemos la ruta donde se instalarán los ejecutables de paquetes. Podemos rellenar dinámicamente el PATH en el archivo rc de su shell en función de la salida; Estoy usando bash, pero con suerte esto es portátil:

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

Uso las versiones precisas de Python para reducir la posibilidad de que los ejecutables simplemente “desaparezcan” cuando Python actualiza una versión secundaria, por ejemplo, de 3.5 a 3.6. Desaparecerán porque, como se puede ver arriba, la ruta de instalación del usuario puede incluir la versión de Python. Entonces, mientras python3 podría apuntar a 3.5 o 3.6, python3.6 siempre apuntará a 3.6. Esto debe tenerse en cuenta al instalar paquetes adicionales, por ejemplo, usar pip3.6 sobre pip3 .

Si no te importa la idea de que desaparezcan los paquetes, puedes usar python2 y python3 en python3 lugar:

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

Me topé con esta pregunta porque creé, construí y publiqué con éxito un paquete PyPI, pero no pude ejecutarlo después de la instalación. La variable $PATH se estableció correctamente.

En mi caso, el problema fue que no había establecido el punto de entry_point en el archivo setup.py :

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

En Windows, debe agregar la ruta %USERPROFILE%\AppData\Roaming\Python\Scripts a su ruta.