Ejecutando Pip3 ImportError: no se puede importar el nombre 'main'

21

Quiero instalar Scipy (ya tengo instalado Numpy). Tengo Python 3.5.1-3 instalado con OS e IDLE3 (3.5.2). Cuando golpeo en la terminal

sudo pip3 install scipy

Se imprime

Traceback (most recent call last):
File "/usr/bin/pip3", line 9, in <module>
from pip import main
ImportError: cannot import name 'main'

Ya he intentado reinstalar pip3 y reiniciar el sistema operativo, pero no cambió. ¿Pip3 ha estado trabajando extrañamente con alguien más?

El perro de cerdo invertible
fuente

Respuestas:

10

numpy y scipy se encuentran en los repositorios predeterminados de todas las versiones actualmente compatibles de Ubuntu. Para instalar numpy y scipy para Python 3.x, abra la terminal y escriba:

sudo apt update    
sudo apt install python3-numpy python3-scipy  

Para Python 2.x es:

sudo apt update  
sudo apt install --no-install-recommends python2.7-minimal python2.7 # this line is only necessary for Ubuntu 17.10 and later 
sudo apt install python-numpy python-scipy
karel
fuente
1
python3-scipy funcionó bien. ¡Gracias!
The Invertible Hog Dog
1
Como dice otra respuesta, esta respuesta no está relacionada con el problema subyacente, que tiene que ver con pip.
cjauvin
Es un mal método ...
darkwoolf
26

Usar en python -m pip installlugar depip install

Ejemplo:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

Empecé a tener este problema después de una pipactualización:

pip install --upgrade --user pip

El ejecutable pip(resp. pip3) Lo proporciona su distribución ( python-pippaquete en Ubuntu 16.04).

Por lo tanto, no se mantiene actualizado con el pippaquete en sí a medida que actualiza pip, y puede romperse.

Si solo lo usa python -m pipdirectamente, por ejemplo, como en:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

recorre su ruta de Python y encuentra la última versión de pip, y ejecuta ese archivo.

Se basa en el hecho de que ese archivo es ejecutable, pero ese es un tipo de interfaz muy estándar y, por lo tanto, es menos probable que se rompa que el script de Debian más pirateado.

Luego recomiendo agregar los siguientes alias a su .bashrc:

pip() ( python -m pip "$@" )
pip3() ( python3 -m pip "$@" )

El /usr/bin/pip3archivo Ubuntu 18.04 hace:

from pip import main

y presumiblemente mainfue eliminado de pipalgún punto que es lo que rompió las cosas.

La confirmación de ruptura de pip parece ser: 95bcf8c5f6394298035a7332c441868f3b0169f4 "Mover todas las API internas a pip._internal" que entró en pip 18.0.

Probado en Ubuntu 16.04 después de una actualización de pip39.0.1 a 18.0.

pyenv

Sin embargo, en última instancia, para el desarrollo serio de Python, solo recomendaría que instale su propio Python local con pyenv + virtualenv, que también solucionaría este error de Ubuntu: ¿Cómo instalo una versión diferente de Python usando apt-get?

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
1
Entonces esto funciona, pero no puedo ser el único que está sacudiendo mi cabeza aquí. ¿Dónde está el desglose? ¿Por qué la actualización predeterminada de pip no puede configurar el nuevo pip de manera que siga funcionando?
Steven Lu
@StevenLu, entiendo que /usr/bin/pipes proporcionado por un paquete de Ubuntu Python, y pipno lo sobrescribe. Pero el pip updatese administra por pipsí mismo y evita tocar los archivos de Ubuntu.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Hola ho misma experiencia aquí. Pip3 NO funcionaría sin importar lo que hice. Esta solución funciona, pero ¿cómo es que? La secuencia de comandos de python pip está preparada por: DebianEl comentario dice: Run the main entry point, similarly to how setuptools does it, but because we didn't install the actual entry point from setup.py, don't use the pkg_resources API. Tal vez hay una manera de instalar Python correctamente en una forma de python.
será el
@will No estoy seguro acerca de ese comentario de documentación, pero estoy seguro de lo que hace el código /usr/bin/pip:-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
20

El error se encuentra en pip 10.0.0.

En Linux necesita modificar el archivo: / usr / bin / pip desde:

from pip import main
if __name__ == '__main__':
    sys.exit(main())

a esto:

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())
Germán
fuente
Este estilo de solución alternativa no parece recomendado por el pipequipo.
jdk1.0
¡¡Salvaste mi día!!
Saurabh Singh
8

Tuve el mismo problema, pero desinstalar y reinstalar con apt y pip no funcionó para mí.

Vi otra solución que presenta una manera fácil de recuperar la ruta pip3:

sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
Hamza Ali
fuente
Esto degradó mi versión de pip3 de 19.0.3 a 8.1.1, pero solucionó el síntoma.
Hawkeye Parker
6

Si bien es posible que karel haya resuelto su problema de "instalar numpy and scipy", lo que está mal con pip en su sistema no se ha solucionado, por lo que probablemente tendrá más problemas con pip en el futuro.

Mirando aquí , parece ser un problema reciente bastante común con pip 10 en sistemas Ubuntu. Es posible que encuentre algunas soluciones alternativas en ese hilo que funcionen para usted, pero con suerte una actualización lo solucionará pronto.

JMAA
fuente
Gracias por solucionar el problema y no dar una solución que solo resuelva el problema parcialmente y solo para una sola persona ...
Caleb Fenton
2

Instalar pip desde apt y pip puede causar esto.

En mi caso, utilicé el paquete pip de Ubuntu para instalar pipenv que luego instaló una copia más nueva de pip. Ahora, debido a que mi shell ejecuta el script pip 9 de Ubuntu (para verificar la ejecución which pip3) y mi intérprete de Python importa el módulo pip 10, el comando pip3 falla. Entonces quiero desinstalar uno de los dos.

Es justo asumir que tienes el pip más nuevo por alguna razón. En ese caso, desea desinstalar el pip anterior de la siguiente manera:

sudo apt remove python3-pip

Si sabe con certeza que está bien con el pip más antiguo y prefiere el paquete del sistema, querrá desinstalar el más nuevo:

~/.local/bin/pip3 uninstall pip

o en su defecto

sudo /usr/local/bin/pip3 uninstall pip

Jeff C
fuente
1

tipo

hash -d pip3

Esto debería eliminar este error

Beto
fuente
3
¿Podría dar más explicaciones sobre su respuesta: qué es 'hash' y por qué eliminaría el error?
Marc Vanhoomissen
1

Forzar la reinstalación de pip funciona bien para la mayoría de los usuarios como se muestra en esta página de github:

python -m pip install --force-reinstall pip
subtleseeker
fuente
gracias. Todas las respuestas anteriores fallaron miserablemente, mientras que la suya funcionó
Pynchia
0

Mi problema terminó siendo una falta de coincidencia entre python3.6 y 3.7. La instalación de python3.6 puso un enlace /usr/bin/python3 -> /usr/bin/python3.6a pesar de que el sistema se había actualizado a python3.7.

sudo apt purge python-pip
sudo apt purge python3-pip
sudo apt install python3.7 --reinstall
cd /usr/bin
sudo rm python3
sudo ln -s python3.7 python3
python3 --version
pip3 --version
Gregory Alan Bolcer
fuente
-1

Esto funcionó para mí:

pip install --upgrade --user pip

Por install --upgrade, me refiero a lo que sea que estés intentando instalar.

Alex Jolig
fuente