Pregunta 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 hizo en http://johnlaudun.org/20150512-installing-and-setting-pip-with-macports/

Puedo instalar paquetes exitosamente e importarlos dentro de mi entorno Python y scripts Python. Sin embargo, no se encuentra ningún ejecutable asociado con un paquete que se pueda llamar desde la línea de comando 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 correr: 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 intento ejecutar: sudo rosdep init, da un error: "sudo: rosdep: command not found"

Este no es un error específico del paquete. Obtengo esto para cualquier paquete instalado usando pip en mi computadora. Incluso intenté agregar

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

para mi $PATH. Pero los ejecutables no se encuentran en la línea de comandos, a pesar de que los paquetes funcionan perfectamente desde python.


32
2018-03-09 17:38


origen


Respuestas:


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 la /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 (sustituir rosdep para tox)

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

que se imprime:

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

Ahora, discos compactos al directorio justo arriba lib en lo de arriba ¿Ves un compartimiento ¿directorio? Lo ves rosdep en ese contenedor? Si es así, intente agregar el bin a tu $ 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

15
2018-03-09 17:54



En macOS necesitas agregar /Users/<you>/Library/Python/2.7/bin/ a tu $ PATH.

Agregue esto a su .bash_profile

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

Ahí es donde pip instala los ejecutables.


19
2018-04-12 11:58



Si estás instalando usando --user (p.ej. pip3.6 install --user tmuxp), es posible obtener el directorio de instalación del usuario específico de la plataforma desde Python utilizando el site módulo. 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 los paquetes ejecutables serán instalados. Podemos poblar dinámicamente la RUTA en el archivo rc de su shell basado en la salida; Estoy usando bash, pero con un poco de 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"

Utilizo las versiones precisas de Python para reducir la posibilidad de que los ejecutables simplemente "desaparezcan" cuando Python actualiza una versión menor, p. de 3.5 a 3.6. Desaparecerán porque, como se puede ver más 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 más paquetes, p. utilizar pip3.6 encima pip3.

Si no te importa la idea de que los paquetes desaparezcan, puedes usar python2 y python3 en 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"

3
2018-01-22 11:39