pip instala los paquetes correctamente, pero los ejecutables no se encuentran en la línea de comandos


110

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 con éxito e importarlos dentro de mi entorno de Python y scripts de Python. Sin embargo, no se encuentra ningún ejecutable asociado con un paquete que se pueda llamar desde la línea de comando en la terminal.

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

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 intento ejecutar:, sudo rosdep initda 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 comandos, a pesar de que los paquetes funcionan perfectamente desde python.


algún virtualenv involucrado?
JL Peyret

no, no hay virtualenv involucrado.
Sanket_Diwale

cuando sudo, cambia a $ PATH del usuario root, solo asegúrese de que su PATH esté actualizado, no su PATH
Anthony Perot

Respuestas:


48

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á?

(editar: las 2.7cosas no importan mucho aquí, sub en cualquiera 3.xy pip se comporta de la misma manera)

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

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

Ahora, para ver dónde están las cosas desde Python, trate de hacer esto (sustituto rosdeppara 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, vaya al directorio que está justo encima libde lo anterior. ¿Ves un directorio bin ? ¿Ves rosdepen esa papelera? Si es así, intente agregar bina 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

Gracias JL por la respuesta, pero este es principalmente mi problema. Para mi aplicación de ejemplo rosdep, cuando hago lo que usted hizo, aquí está la salida obtenida: lista de pip | grep rosdep rosdep (0.11.4) que rosdep (sin salida), la línea de comando no devuelve nada
Sanket_Diwale

1
que no regresa rosdepes consistente con su problema. mi punto es que necesita encontrar dónde rosdepestá instalado y cómo se ve $ PATH.
JL Peyret

Gracias, mis binarios también se instalaron en /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin. Se agregó eso al PATH y ahora está funcionando. Gracias, estaba teniendo problemas para localizar los binarios ya que no proporcionaba ningún resultado.
Sanket_Diwale

export PATH = / opt / local / Library / Frameworks / Python.framework / Versions / 2.7 / bin: $ PATH faltaba en mis rutas y me hizo el truco en OSX
Caio Iglesias

1
Si no puede encontrar el programa con which(si aún no está en su camino), también puede intentar encontrar el binario usando mlocateLinux o mdfindmacOS.
jackcogdill

54

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 pythonbusque la ubicación de su instalación de Python y reemplace esa parte en la ruta anterior. (Gracias por la pista Sanket_Diwale)


8
El lugar donde se instala pip depende de cómo haya instalado Python, MacOS tiene varias formas de instalar Python, como macports, homebrew y sistema predeterminado. Dependiendo de la versión de Python que se esté utilizando, tendrá diferentes ubicaciones para pip. Una forma fácil de averiguar dónde se encuentran pip y python sería usar "qué python" en la terminal y luego agregar la ubicación adecuada a $ PATH.
Sanket_Diwale

Para macOS 10.14.3 instalando Python 3.6 desde python.org, which python3finalmente me llevó (a través de un enlace) a /Library/Frameworks/Python.framework/Versions/3.6/bin/.
phoenix

42

Si está instalando usando --user(p pip3.6 install --user tmuxp. Ej. ), Es posible obtener el directorio de instalación del usuario específico de la plataforma desde Python usando el sitemódulo . Por ejemplo, en macOS:

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

Añadiendo /bina esto, ahora tenemos la ruta donde se instalarán los ejecutables del paquete. Podemos rellenar 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, aunque python3podría apuntar a 3.5 o 3.6, python3.6siempre apuntará a 3.6. Esto debe tenerse en cuenta al instalar más paquetes, por ejemplo, use pip3.6over pip3.

Si no le importa la idea de que los paquetes desaparezcan, puede usar python2y en su python3lugar:

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

21

Sé que la pregunta es sobre macOS, pero aquí hay una solución para los usuarios de Linux que llegan aquí a través de Google.

Estaba teniendo el problema descrito en esta pregunta, habiendo instalado el paquete pdfx a través de pip.

Sin embargo, cuando lo ejecuté, nada ...

pip list | grep pdfx
pdfx (1.3.0)

Todavía:

which pdfx
pdfx not found

El problema en Linux es que pip install ...suelta scripts ~/.local/biny esto no está en Debian / Ubuntu predeterminado $PATH.

Aquí hay un problema de GitHub que entra en más detalles: https://github.com/pypa/pip/issues/3813

Para solucionarlo, simplemente agregue ~/.local/bina su $PATH, por ejemplo, agregando la siguiente línea a su .bashrcarchivo:

export PATH="$HOME/.local/bin:$PATH"

Después de eso, reinicie su shell y las cosas deberían funcionar como se esperaba.


2
En lugar de reiniciar su shell, puede source ~/.bashrcvolver a cargar la .bashrcconfiguración
Whiteclaws

1
Excelente. Recibía "comando tox no encontrado". Después de actualizar PATH, funciona
GabrielBB

5

Solución

Según otras respuestas, para linuxy macpuede ejecutar lo siguiente:

echo "export PATH=\"`python3 -m site --user-base`/bin:$PATH\"" >> ~/.bashrc
source ~/.bashrc

en lugar de python3que puede utilizar cualquier otro enlace a la versión Python: python, python2.7, python3.6, python3.9, etc.

Explicación

Para saber dónde están instalados los paquetes de usuario en el sistema operativo actual (win, mac, linux), ejecutamos:

python3 -m site --user-base

Sabemos que los scripts van a la bin/carpeta donde están instalados los paquetes.

Entonces concatenamos los caminos:

echo `python3 -m site --user-base`/bin

Luego exportamos eso a una variable de entorno.

export PATH=\"`python3 -m site --user-base`/bin:$PATH\""

Finalmente, para evitar repetir el comando de exportación lo agregamos a nuestro .bashrcarchivo y ejecutamos sourcepara ejecutar los nuevos cambios, dándonos la solución sugerida mencionada al principio.


Esto funcionó para mí y no sé por qué
Benjamints

@Benjamints agregó una explicación, espero que ayude, ¡buena suerte!
Willemoes

¡muchas gracias! :)
Benjamints

3

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


2

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

En mi caso, el problema era que no había configurado el entry_pointen el setup.pyarchivo:

entry_points = {'console_scripts':

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

2

Además de agregar el bindirectorio de Python a la $PATHvariable, 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/

0

Cuando instala Python o Python3 usando el instalador de MacOS (descargado del sitio web de Python), agrega una exporter a su ~/.profilesecuencia de comandos. Todo lo que necesita hacer es sourcehacerlo. Reiniciar todos los terminales también debería funcionar.

ADVERTENCIA: creo que es mejor usar pip3 con Python3 para obtener beneficios futuros.

Si ya tiene Python3 instalado, los siguientes pasos me funcionan en macOS Mojave:

  1. Instale ansible primero usando sudo-sudo -H pip3 install ansible

  2. creas un enlace simbólico a la binruta de Python

sudo ln -s /Library/Frameworks/Python.framework/Versions/Current/bin /Library/Frameworks/Python.framework/current_python_bin

y engraparlo a .profile

export PATH=$PATH:/Library/Frameworks/Python.framework/current_python_bin

  1. ejecute source ~/.profiley reinicie todos los shells de terminal.

  2. Tipo ansible --version

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.