Error después de actualizar pip: no se puede importar el nombre 'principal'

Resuelto g_p asked hace 6 años • 32 respuestas

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.

g_p avatar Apr 15 '18 05:04 g_p
Aceptado

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

anthony sottile avatar Apr 14 '2018 22:04 anthony sottile

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

vijay athithya avatar Jul 22 '2018 05:07 vijay athithya

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-pippaquete 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 pipcomando que funciona (ya en $PATH), además de la buena --useropció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 aptpara 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 --useropció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. --userSus módulos por usuario instalados de forma personalizada (con pip ) ~/.local/libtambié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 pip3apunta al mismo /usr/lib/python3/dist-packagesdirectorio 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 apty no deben modificarse.

Entonces, si usa pip3 installel 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 ( --useropció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 (ver pip3 -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 pip3para desinstalar completamente el pip3 v8 de Debian, a favor de su nuevo pip3 v10.

Nota: ¡ Siempre necesitarás agregar --useruna 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

stop.climatechange.now avatar May 06 '2018 22:05 stop.climatechange.now

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.

Saket avatar Jul 24 '2018 12:07 Saket