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