instalación de pip /usr/local/opt/python/bin/python2.7: mal intérprete: no existe tal archivo o directorio

90

No sé cuál es el problema, pero estoy atascado siguiendo algunas soluciones de stackoverflow que no llevan a ninguna parte. ¿Puedes por favor ayudarme en esto?

  Monas-MacBook-Pro:CS764 mona$ sudo python get-pip.py
    The directory '/Users/mona/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
    The directory '/Users/mona/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
    /tmp/tmpbSjX8k/pip.zip/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
    Collecting pip
      Downloading pip-7.1.0-py2.py3-none-any.whl (1.1MB)
        100% |████████████████████████████████| 1.1MB 181kB/s 
    Installing collected packages: pip
      Found existing installation: pip 1.4.1
        Uninstalling pip-1.4.1:
          Successfully uninstalled pip-1.4.1
    Successfully installed pip-7.1.0
    Monas-MacBook-Pro:CS764 mona$ pip --version
    -bash: /usr/local/bin/pip: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory
Mona Jalal
fuente

Respuestas:

168

Había usado home-brew para instalar 2.7 en OS X 10.10 y a la nueva instalación le faltaban los enlaces simbólicos. Yo corrí

brew link --overwrite python

como se menciona en ¿Cómo enlazar simbólicamente Python en Homebrew? y resolvió el problema.

LancDec
fuente
6
Eso me salvó. FWIW, tuve que hacer tres pasos para arreglar mi Python en El Capitan: brew install python; brew linkapps python; brew link --overwrite python
Saish
¿Cómo hacer lo contrario de eso?
bubakazouba
3
reverso: brew unlink python
Anders B
1
Solo para agregar a esto. Descubrí que tenía que ejecutar "xcode-select --install" por cualquier motivo. "brew reinstall python" no funcionaría hasta que hice eso. En mi caso particular, utilicé el asistente de migración para pasar de una computadora física a otra. Después de esas dos cosas, todo se resolvió y pip3 funcionó.
chrisallick
Python ya estaba vinculado correctamente para mí, lo que ayudó fue lo pip3 install --upgrade pipque señaló @Excalibur en un comentario más abajo.
retrovertigo
56

Supongo que tiene dos instalaciones de Python o dos instalaciones de pip, una de las cuales se ha eliminado parcialmente.

¿Por qué lo usa sudo? Idealmente, debería poder instalar y ejecutar todo desde su cuenta de usuario en lugar de usar root. Si mezcla root y su cuenta local, es más probable que se encuentre con problemas de permisos (por ejemplo, vea la advertencia que da sobre "el directorio principal no es propiedad del usuario actual").

¿Qué obtienes si ejecutas esto?

$ head -n1 /usr/local/bin/pip

Esto le mostrará qué binario de Python pipestá intentando usar. Si está apuntando /usr/local/opt/python/bin/python2.7, intente ejecutar esto:

$ ls -al /usr/local/opt/python/bin/python2.7

Si dice "No existe ese archivo o directorio", entonces pip está intentando usar un binario de Python que ha sido eliminado.

A continuación, intente esto:

$ which python
$ which python2.7

Para ver la ruta del binario de Python que realmente funciona.

Dado que parece que pip se instaló correctamente en algún lugar, podría ser que /usr/local/bin/pipsea ​​parte de una instalación anterior de pip que está más arriba en el PATH. Para probar eso, puede intentar quitar el pipbinario que no funciona de esta manera (podría requerir sudo):

$ mv /usr/local/bin/pip /usr/local/bin/pip.old

Luego intente ejecutar su pip --versioncomando nuevamente. Con suerte, recupera la versión correcta y se ejecuta correctamente.

Steven Kryskalla
fuente
grandes explicaciones. Nota al margen: tener que depurar el administrador de paquetes de un lenguaje instalado para sacar un proyecto de Mercurial es lo que me hace perder la fe en todas esas cosas informáticas. Ups .. Y ahora para un nuevo error de Python "AttributeError local repository"
nicolas
1
Tengo el mismo problema, pero esto no funcionó para mí, incluso después de seguir estas instrucciones. PIP sigue utilizando una ruta incorrecta. ¿Hay otra forma de hacer esto?
Adam Starrh
5
Tuve que instalar pip: sudo /usr/bin/easy_install pip- Lo encontré aquí: stackoverflow.com/questions/27308234/…
Adam Starrh
El problema es que si esa es la única versión de pip que está instalada, entonces no tiene suerte
einarc
55

Única solución en OSX y su variante.

ln -s /usr/local/bin/python /usr/local/opt/python/bin/python2.7
El exorcista
fuente
1
Intenté presentar la respuesta de una manera fluida y sencilla.
TheExorcist
Es probable que esto tenga efectos secundarios en otros programas que utilizan Python. Además, el final de la vida útil de Python 2 es el 1 de enero de 2020, y sus desarrolladores han indicado que eventualmente (o en algunos entornos, ya) "python" sin modificador debería referirse a Python 3 python.org/dev/peps / pep-0394
kotoole
@kotoole A partir de su respuesta, parece que sus ojos pueden ver, pero no pueden observar, simplemente reemplace python2.7 con python3.x, seguirá funcionando igual.
TheExorcist
1
@TheExorcist, lamentablemente para todos nosotros, Python2 y Python3 son lenguajes diferentes. El código escrito para un idioma se romperá cuando se ejecute en el otro. Reemplazar python con python2.7 al por mayor parece muy probable que rompa otras aplicaciones en el futuro. Esta solución "funciona" de la misma manera que la eliminación de la puerta de entrada funciona cuando olvidó sus llaves. Te ayuda a pasar, pero no vengas llorando cuando tu casa comience a llenarse de insectos.
kotoole
@kotoole por supuesto, tienes razón, pero a veces tenemos que hacer lo que tenemos que hacer en este momento.
TheExorcist
32

Pip de fijación

Para este error:

~/Library/Python/2.7/bin/pip: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory`

La fuente de este problema es una ruta de Python incorrecta codificada en pip (lo que significa que no se solucionará, por ejemplo, cambiando su $ PATH). Esa ruta ya no está codificada en la última versión de pip, por lo que una solución que debería funcionar es:

pip install --upgrade pip

Pero, por supuesto, este comando usa pip, por lo que falla con el mismo error.

La forma de salir de este lío:

  1. correr which pip
  2. Abra ese archivo en un editor de texto
  3. Cambie la primera línea de #!/usr/local/opt/python/bin/python2.7a, por ejemplo #!/usr/local/opt/python2/bin/python2.7(observe python2 en la ruta), o cualquier ruta a un intérprete de Python que funcione en su máquina.
  4. Ahora, pip install --upgrade pip(esto sobrescribe su truco y hace que pip funcione en la última versión, donde el problema del intérprete debería solucionarse)

Reparando virtualenv

Para mí, encontré este problema al tener primero el mismo problema de virtualenv:

~/Library/Python/2.7/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory`

La solución aquí es ejecutar

pip uninstall virtualenv
pip install virtualenv

Si ejecutar ese comando da el mismo error de pip, vea arriba.

kotoole
fuente
1
Sí, después de haber tenido Python 2.7 y 3.6 en Mac OSX, luego actualizar a 3.6, tuve este problema. Esta fue la solución que funcionó para mí ( pip3 install --upgrade pip)
Excalibur
No: pip Traceback (última llamada más reciente): Archivo "/ usr / local / bin / pip", línea 7, en <module> desde pip._internal import main ImportError: Ningún módulo llamado pip._internal
einarc
@Excalibur Agregué su solución como comentario debajo de la respuesta aceptada. ¡Gracias por eso!
retrovertigo
26

Cometí el mismo error al usar sudo para mi instalación. (oops)

brew install python
brew linkapps python
brew link --overwrite python 

Esto hizo que todo volviera a la normalidad.

DaveSaunders
fuente
21
linkapps está obsoleto
Steve
15

Debido a que tenía Python 2 y 3 instalados en Mac OSX, estaba teniendo todo tipo de errores.

Usé cuál para encontrar la ubicación de mi archivo python2.7 (/usr/local/bin/python2.7)

which python2.7

Luego conecté simbólicamente mi ubicación de instalación real de python2.7 con la que esperaba el script:

ln -s /usr/local/bin/python2.7 /usr/local/opt/python/bin/python2.7
Simon Briggs
fuente
2
¡Salvador de la vida! Gracias.
Brian Fegter
12

Tuve un problema similar. Básicamente, pip estaba buscando en una ruta incorrecta (ruta de instalación anterior) o python. La siguiente solución funcionó para mí:

  • Verifiqué dónde está la ruta de Python (intentar which python)
  • Revisé la primera línea del archivo pip ( /usr/local/bin/pip2.7y /usr/local/bin/pip). La línea debe indicar la ruta correcta a la ruta de Python. En mi caso, no lo hice. Lo corrigí y ahora funciona bien.
sahar
fuente
9

En caso de que ayude a alguien, la solución mencionada en esta otra pregunta funcionó para mí cuando pip dejó de funcionar hoy después de actualizarlo: Pip roto después de actualizar

Parece que es un problema cuando cambia una ubicación previamente almacenada en caché, por lo que puede actualizar la caché con este comando:

hash -r
Jordán
fuente
9

Para simplificar la operación, podemos usar el siguiente comando para reinstalar la versión 2:

brew install python@2

Luego, en mi mac, se ve a continuación:

▶ python -V
Python 2.7.10

▶ python2 -V
Python 2.7.14

▶ python3 -V
Python 3.6.5

▶ pip2 -V
pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)

▶ pip3 -V
pip 9.0.3 from /usr/local/lib/python3.6/site-packages (python 3.6)

▶ pip --version
pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)
feuyeux
fuente
1
Para reinstalar hay reinstallcomando en brew:brew reinstall python@2
Valeriy Van
4

Tuve el mismo problema. Tengo Python 2.7 y 3.6 instalados. Python 2.7 virtualenvfuncionaba, pero después de instalar Python3, virtualenv siguió buscando la versión 2.7 y no pudo encontrarla. Haciendo pip install virtualenvinstalado la versión Python3 de virtualenv.

Luego, para cada comando, si quiero usar Python2, usaría virtualenv --python=python2.7 somecommand

yabrol
fuente
4

Tuve el mismo problema, virtualenv apuntaba a una antigua ruta de Python. Arreglar la ruta resolvió el problema:

$ virtualenv -p python2.7 env
-bash: /usr/local/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory

$ which python2.7
/opt/local/bin/python2.7

# needed to change to correct python path
$ head  /usr/local/bin/virtualenv
#!/usr/local/opt/python/bin/python2.7 <<<< REMOVED THIS LINE
#!/opt/local/bin/python2.7 <<<<< REPLACED WITH CORRECT PATH

# now it works:
$ virtualenv -p python2.7 env
Running virtualenv with interpreter /opt/local/bin/python2.7
New python executable in env/bin/python
Installing setuptools, pip...done.
dg
fuente
Esto funcionó. ¿Pero es una solución a largo plazo? Noto este problema con un par de cosas más, por lo que esto requeriría cambiarlo para cada instancia en que ya no funcione, y me preocupan los efectos a largo plazo de esto.
Jake T.
Definitivamente no es una solución a largo plazo. En mi caso, había jugado con mi entorno de Python, por lo que creo que se metió en esta situación y buscó una solución rápida. Sospecho que desinstalar virtualenv y luego reinstalarlo con un pip funcional de python2.7 haría que esto se pegara.
dg
2

Tengo el mismo problema. Si corro brew link --overwrite python2. Aún quedaba zsh: /usr/local/bin//fab: bad interpreter: /usr/local/opt/python/bin/python2.7: no such file or directory.

cd /usr/local/opt/
mv python2 python

¡Resuelto! Ahora podemos usar el tejido de la versión python2.

=== 2018/07/25 actualizado

Hay una forma conveniente de usar la versión de python2 fab cuando su sistema operativo python está vinculado a python3. .shpor tu mando.

# fab python2
cd /usr/local/opt
rm python
ln -s python2 python

# use the fab cli
...

# link to python3
cd /usr/local/opt
rm python
ln -s python3 python

Espero que esto ayude.

Peter. Chen
fuente
2

Editar la primera línea de este archivo funcionó para mí:

MBP-de-Jose:~ josejunior$ which python3

/usr/local/Cellar/python/3.7.3/bin/python3

MBP-de-Jose:~ josejunior$

antes de

#!/usr/local/opt/python/bin/python3.7

después

#!/usr/local/Cellar/python/3.7.3/bin/python3
José Junior
fuente
2

Todo lo que necesita hacer es ... cerrar la ventana de la terminal y volver a abrir una nueva para solucionar este problema.

El problema es que no se agrega una nueva ruta de Python a bashrc (ya sea la fuente o la nueva ventana de terminal ayudaría).

Nithin Gaddam
fuente
1

En mi caso, decidí eliminar la instalación de Python Homebrew de mi Mac, ya que ya tenía otras dos versiones de Python instaladas en mi Mac a través de MacPorts. Esto provocó el mensaje de error.

Reinstalar Python a través de brew resolvió mi problema.

Simón
fuente
1
sudo /usr/bin/easy_install pip

este comando funcionó para mí

usuario9022502
fuente
1

Para mí, en centOS 7 tuve que eliminar el enlace pip antiguo de / bin por

rm /bin/pip2.7 
rm /bin/pip

luego vuelve a vincularlo con

sudo ln -s  /usr/local/bin/pip2.7 /bin/pip2.7

Entonces sí

/usr/local/bin/pip2.7

Funciona, esto debería funcionar

Nimr Sawafta
fuente
0

Podría tener dos versiones diferentes de Python y pip.

Intentar:

pip2 install --upgrade pip y entonces pip2 install -r requirements.txt

O pip3si tiene una versión más reciente de Python.

Wojciech Bednarski
fuente
0

TLDR: pip encontrado en su ruta a es un enlace simbólico y la ubicación referenciada ya no contiene el ejecutable. Necesita actualizar el enlace simbólico.

Ayuda a comprender un par de cosas.

  • Cuando escribe algo como pythono pip, el sistema operativo buscará /etc/pathspara intentar encontrar el ejecutable asociado para ese comando. Puedes ver todo lo que hay allí usando cat /etc/paths.
  • Para determinar la ubicación del ejecutable que usará su shell, hay un comando útil which, puede escribir which pythono which pip. Esto le dirá la ubicación del ejecutable que su shell usará para ese comando.
  • Esta parte es clave . La ubicación puede ser o no un ejecutable real, podría ser un enlace simbólico (enlace simbólico).
  • Es común /etc/pathsque contenga /usr/local/bin, también es común /usr/local/binque haya un montón de enlaces simbólicos a los ejecutables reales. No los propios ejecutables.
  • Si el ejecutable en la ubicación de referencia de los enlaces simbólicos no existe, obtendrá un error como bad interpreter: No such file or directory

Dicho esto, es probable que el problema sea pipun enlace simbólico y el ejecutable vinculado probablemente ya no exista en esa ubicación. Para solucionarlo, haga lo siguiente

  1. Encuentra la ubicación del ejecutable - which pip(da algo como esto /usr/local/bin/pip)
  2. Verifique la ubicación de referencia del enlace simbólico ls -l /usr/local/bin/pip | grep pip(proporcione algo como esto pip -> /usr/local/opt/[email protected]/bin/pip3)
  3. Verifique si el ejecutable existe en la ubicación referenciada ls /usr/local/opt/[email protected]/bin/pip3 (tiene este problema, por lo que probablemente no sea así).
  4. Eliminar el enlace simbólico antiguo rm -r /usr/local/bin/pip
  5. Encuentre el pipejecutable real, si homebrewlo va a usar /usr/local/opt, puede usar algo como ls /usr/local/opt/ | grep pythonpara encontrarlo.
  6. Agregue el enlace simbólico correcto para el ejecutable pip. ln -s /usr/local/opt/[email protected]/bin/pip3 /usr/local/bin/pip
Glen Thompson
fuente