Error después de actualizar pip: no se puede importar el nombre 'principal'
Cada vez que intento instalar cualquier paquete usando pip, aparece este error de importación:
guru@guru-notebook:~$ pip3 install numpy
Traceback (most recent call last):
File "/usr/bin/pip3", line 9, in <module>
from pip import main
ImportError: cannot import name 'main'
guru@guru-notebook:~$ cat `which pip3`
#!/usr/bin/python3
# GENERATED BY DEBIAN
import sys
# 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.
from pip import main
if __name__ == '__main__':
sys.exit(main())
Antes funcionaba bien, no estoy seguro de por qué arroja este error. He buscado sobre este error, pero no encuentro nada para solucionarlo.
Avíseme si necesita más detalles y actualizaré mi pregunta.
Debes haber actualizado el pip de tu sistema sin darte cuenta (probablemente a través de algo como sudo pip install pip --upgrade
)
pip 10.x ajusta dónde están situadas sus partes internas. El pip3
comando que está viendo es uno proporcionado por el responsable del paquete (¿presumiblemente basado en Debian aquí?) y no es un archivo administrado por pip.
Puedes leer más sobre esto en el rastreador de problemas de pip.
Probablemente no querrás actualizar el pip de tu sistema y en su lugar utilizar un virtualenv.
Para recuperar el pip3
binario necesitarás sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
.
Si desea continuar en "territorio no compatible" (actualizando un paquete del sistema fuera del administrador de paquetes del sistema), probablemente pueda salirse con la suya python3 -m pip ...
en lugar de pip3
.
Podemos borrar el error modificando el archivo pip.
Verifique la ubicación del archivo:
$ which pip
ruta -> /usr/bin/pip
Vaya a esa ubicación ( /usr/bin/pip ) y abra la terminal
Ingresar:$ sudo nano pip
Puedes ver:
import sys
from pip import main
if __name__ == '__main__':
sys.exit(main())
Cambiar a:
import sys
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
luego ctrl + o escribe los cambios y sale
¡¡Espero que esto sirva!!
Para usuarios de la familia Ubuntu, Debian, Linux Mint
Gracias a la explicación anterior de Anthony , puede conservar el pip original del sistema (en /usr/bin/ y dist-packages/) y eliminar el pip instalado manualmente (en ~/.local/) para resolver el conflicto:
$ python3 -m pip uninstall pip
Ubuntu/Debian pip v8.1.1 (16.04) del python3-pip
paquete debian (ver $ pip3 -V
) muestra los mismos resultados de búsqueda que el último pip v10.0.1 e instala los módulos más recientes de PyPI sin problemas. Tiene un pip
comando que funciona (ya en $PATH), además de la buena --user
opción parcheada de forma predeterminada desde 2016. Al observar las notas de la versión de pip , las versiones más nuevas tratan principalmente de correcciones de errores específicos de casos de uso y ciertas características nuevas, por lo que no Todo el mundo tiene que apresurarse a actualizar pip todavía. Y el nuevo pip 10 se puede implementar en entornos virtuales de Python, de todos modos.
Pero independientemente de los pips, su sistema operativo permite instalar rápidamente módulos Python comunes (incluido numpy) con APT, sin la necesidad de pip, por ejemplo:
$ sudo apt install python3-numpy python3-scipy
(con dependencias del sistema)
$ sudo apt install python3-pip
(pip parcheado por Debian, un poco más antiguo pero no importa)
Recordatorio rápido de sintaxis apt (consulte
man apt
para obtener más detalles):
$ sudo apt update
(para resincronizar los archivos de índice de paquetes de Ubuntu desde fuentes actualizadas)
$ apt search <python-package-name>
(búsqueda de texto completo en todos los paquetes disponibles)
$ apt show <python-package-name>
(muestra la descripción detallada del paquete)
$ sudo apt install <python-package-name>
Los nombres de los paquetes con el prefijo python-
son para Python 2; y con el prefijo python3-
son para Python 3 (por ejemplo, python3-pandas). Hay miles y se someten a pruebas de integración dentro de Debian y Ubuntu. A menos que busque instalar a nivel por usuario ( pip install --user
opción) o dentro de virtualenv/venv, apt podría ser lo que necesitaba. También se puede acceder a estos paquetes del sistema desde entornos virtuales, ya que virtualenv recurrirá con gracia al uso de bibliotecas del sistema al importar si sus entornos no tienen copias de los módulos. --user
Sus módulos por usuario instalados de forma personalizada (con pip ) ~/.local/lib
también los anularán.
Tenga en cuenta que, dado que se trata de una instalación para todo el sistema , rara vez necesitará eliminarlos (debe tener en cuenta las dependencias del sistema operativo). Esto es conveniente para paquetes con muchas dependencias del sistema (como scipy o matplotlib), ya que APT realizará un seguimiento y proporcionará todas las bibliotecas del sistema y extensiones C necesarias, mientras que con pip no tiene tales garantías .
De hecho, para los paquetes Python de todo el sistema (a diferencia de los paquetes por usuario, de nivel de directorio de inicio o inferiores), Ubuntu espera usar el administrador de paquetes APT (en lugar de sudo pip
) para evitar dañar el sistema operativo: sudo pip3
apunta al mismo /usr/lib/python3/dist-packages
directorio donde APT almacena el sistema operativo. -Módulos sensibles. Las versiones recientes de Debian/Ubuntu dependen en gran medida de Python 3, por lo que sus módulos preinstalados son administrados apt
y no deben modificarse.
Entonces, si usa pip3 install
el comando, asegúrese de que se ejecute en un entorno de desarrollo virtual aislado, como con virtualenv ( sudo apt install python3-virtualenv
), o con Python3 integrado ( -m venv
), o a nivel por usuario ( --user
opción pip, predeterminada en Ubuntu). pip desde 2016), pero no en todo el sistema (¡nunca sudo pip3
!), porque pip interfiere con el funcionamiento del administrador de paquetes APT y puede afectar los componentes del sistema operativo Ubuntu cuando un módulo de Python utilizado en el sistema se cambia inesperadamente. ¡Buena suerte!
P. S. Todo lo anterior es para la solución "ideal" (forma Debian/Ubuntu).
Si aún desea utilizar el nuevo pip3 v10 exclusivamente, existen 3 soluciones rápidas:
- simplemente abra una nueva sesión de bash (una nueva pestaña de terminal o escriba
bash
) y pip3 v10 estará disponible (verpip3 -V
). pip3 v8 de Debian permanece instalado pero está roto; o - el comando
$ hash -d pip3 && pip3 -V
para actualizar el nombre de ruta de pip3 en $PATH. pip3 v8 de Debian permanece instalado pero está roto; o - el comando
$ sudo apt remove python3-pip && hash -d pip3
para desinstalar completamente el pip3 v8 de Debian, a favor de su nuevo pip3 v10.
Nota: ¡ Siempre necesitarás agregar --user
una bandera a cualquier pip que no sea proporcionado por Debian, a menos que estés en un entorno virtual! (Implementa paquetes de Python en ~/.local/
, de forma predeterminada en python3-pip y python-pip proporcionados por Debian/ubuntu desde 2016). Ubuntu/Debian no admite realmente el uso de pip 10 en todo el sistema, fuera de virtualenv. Nunca sudo pip3
!
Más detalles:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100
resuelto en un solo paso.
Yo también enfrenté este problema, pero esto se puede resolver simplemente con 1 comando sin molestar ni perder tiempo y lo he probado en varios sistemas; es la solución más limpia para este problema. Y eso es:
Para python3:- sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
.
Con esto, simplemente puede instalar paquetes usando pip3
. para comprobar el uso pip3 --version
.
Para versiones anteriores, utilice: sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall
.
Con esto, ahora puede simplemente instalar paquetes usando pip
. para comprobar el uso pip --version
.