programa - powershell no reconoce python
pip instala paquetes con éxito, pero los ejecutables no se encuentran desde la línea de comandos (6)
Estoy trabajando en mac OS X Yosemite, versión 10.10.3.
Instalé python2.7 y pip usando macport como lo hice en http://johnlaudun.org/20150512-installing-and-setting-pip-with-macports/
Puedo instalar paquetes con éxito 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 comandos en el terminal.
¿Alguien sabe qué podría estar mal? (Más detalles a continuación)
Por ejemplo, mientras instala 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 intento ejecutar:
sudo rosdep init
,
sudo rosdep init
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
a mi
$PATH
.
Pero los ejecutables no se encuentran en la línea de comando, a pesar de que los paquetes funcionan perfectamente desde Python.
Además de agregar el directorio
bin
de python a la variable
$PATH
, también tuve que cambiar el propietario de ese directorio para que funcione.
No tengo idea de por qué ya no era el dueño.
chown -R ~/Library/Python/
En Windows, debe agregar la ruta
%USERPROFILE%/AppData/Roaming/Python/Scripts
a su ruta.
En macOS con la instalación de Python predeterminada, debe agregar
/Users/<you>/Library/Python/2.7/bin/
a su $ PATH.
Agregue esto a su .bash_profile:
export PATH="/Users/<you>/Library/Python/2.7/bin:$PATH"
Ahí es donde pip instala los ejecutables.
Consejo: Para la versión de Python no predeterminada,
which python
buscará la ubicación de su instalación de Python y reemplazará esa parte en la ruta anterior.
(Gracias por la pista Sanket_Diwale)
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 configuró correctamente.
En mi caso, el problema era 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''],},
Si está instalando usando
--user
(p
pip3.6 install --user tmuxp
Ej.,
pip3.6 install --user tmuxp
),
es posible obtener el directorio de instalación de usuario específico de la plataforma de Python usando 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 del paquete.
Podemos llenar dinámicamente la RUTA 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"
Utilizo las versiones precisas de Python para reducir la posibilidad de que los ejecutables simplemente "desaparezcan" cuando Python actualiza una versión menor, 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, si bien
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, por ejemplo, use
pip3.6
sobre
pip3
.
Si no le importa la idea de que los paquetes desaparezcan, puede 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"
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 de dónde provienen 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 encima de
lib
en lo anterior.
¿Ves un directorio
bin
?
¿Ves a
rosdep
en ese contenedor?
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