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

Cuando bash instalar cualquier paquete usando pip, obtengo este error de importación:

guru@guru-notebook:~$ pip3 install numpy Traceback (most recent call last): File "/usr/bin/pip3", line 9, in  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()) 

Estaba funcionando bien antes, no estoy seguro de por qué está generando este error. He buscado sobre este error, pero no puedo encontrar nada para solucionarlo.

Por favor, avíseme si necesita más detalles, actualizaré mi pregunta.

Debes haber actualizado inadvertidamente el pip de tu sistema (probablemente a través de algo como sudo pip install pip --upgrade )

pip 10.x ajusta donde están situados sus internos. El comando pip3 que está viendo es uno proporcionado por el mantenedor de su paquete (¿probablemente 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 cambio, utilizar un virtualenv.

Para recuperar el binario pip3 necesitará sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall .

Si desea continuar en “territorio no admitido” (actualizar un paquete del sistema fuera del administrador de paquetes del sistema), probablemente pueda salirse con python3 -m pip ... lugar de pip3 .

Podemos borrar el error modificando el archivo pip.

Compruebe la ubicación del archivo:

 $ which pip 

ruta -> / usr / bin / pip

Vaya a esa ubicación ( / usr / bin / pip ) y abra el terminal

Introduzca: $ 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 haga!

Para la familia Ubuntu, usuarios de Debian, Linux Mint.

Gracias a la explicación anterior de Anthony, puede conservar su pip del sistema original (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 paquete debian de python3-pip (ver $ pip3 -V ) muestra los mismos resultados de búsqueda que el último pip v10.0.1, e instala los últimos módulos de PyPI muy bien. Tiene un comando pip trabajo (ya en $ PATH), más la opción agradable --user parcheada de forma predeterminada desde 2016. En cuanto a las notas de lanzamiento de pip , las versiones más recientes son principalmente sobre correcciones de errores específicas del caso de uso y ciertas novedades. características, por lo que no todo el mundo tiene que acelerar la actualización de pip aún. Y el nuevo pip 10 se puede implementar en Python virtualenvs, de todos modos.

Pero independientemente de los pips, su sistema operativo permite instalar rápidamente módulos comunes de Python (incluido el número) 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 ( $ sudo apt install python3-pip con parche de Debian, un poco más antiguo pero no importa)

Recordatorio de syntax de apt rápido (por favor vea man apt para más detalles):
$ sudo apt update (para volver a sincronizar los archivos de índice de paquetes de Ubuntu de fonts actualizadas)
$ apt search (búsqueda de texto completo en todos los paquetes disponibles)
$ apt show (muestra la descripción detallada del paquete)
$ sudo apt install

Los nombres de paquetes prefijados con 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 pip install --user nivel de usuario ( pip install --user opción de pip install --user ) o dentro de virtualenv / venv, apt podría ser lo que necesita. También se puede acceder a estos paquetes del sistema desde envs virtuales, ya que virtualenv volverá a usar las librerías del sistema al importarlos si sus envs no tienen copias de los módulos. Los módulos por usuario instalados de forma personalizada (con pip – user) en ~/.local/lib también los anularán.

Tenga en cuenta que, dado que se trata de una instalación de todo el sistema , rara vez tendrá que eliminarlos (debe tener en cuenta las dependencias del sistema operativo). Esto es conveniente para paquetes con muchas dependencias del sistema (como con scipy o matplotlib), ya que APT hará un seguimiento y proporcionará todas las libs del sistema y las extensiones C necesarias, mientras que con pip no tiene tales garantías .

De hecho, para los paquetes de Python de todo el sistema (en contraste con por usuario, nivel de directorio de inicio o inferior), Ubuntu espera usar el gestor de paquetes de APT (en lugar de sudo pip ) para evitar romper el sistema operativo: sudo pip3 apunta a lo mismo /usr/lib/python3/dist-packages donde APT almacena módulos sensibles al sistema operativo. Las recientes versiones de Debian / Ubuntu dependen en gran medida de Python 3, por lo que sus módulos preinstalados son administrados por apt y no deben cambiarse.

Entonces, si usa el comando pip3 install , asegúrese de que se ejecute en un entorno de desarrollo virtual aislado, como con virtualenv ( sudo apt install python3-virtualenv ), o con Python3 incorporado ( -m venv ), o en una nivel de usuario (opción --user usuario, predeterminado en pip proporcionado por Ubuntu desde 2016), pero no en todo el sistema (¡nunca sudo pip3 !), porque pip interfiere con el funcionamiento del gestor de paquetes APT y puede afectar los componentes del sistema operativo Ubuntu cuando El módulo de Python usado por 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, hay 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 (vea pip3 -V ). pip3 v8 de debian permanece instalado pero está roto; o
  • el comando $ hash -d pip3 && pip3 -V para actualizar la ruta pip3 en el $ PATH. pip3 v8 de debian permanece instalado pero está roto; o
  • El comando $ sudo apt remove python3-pip && hash -d pip3 para desinstalar por completo el pip3 v8 de debian, a favor de tu nuevo pip3 v10.

Nota: siempre deberá agregar el indicador de --user a cualquier --user no provisto por Debian, a menos que esté en un virtualenv. (implementa paquetes de python en ~/.local/ , predeterminado en debian / ubuntu-python3-pip y python-pip proporcionados desde 2016). Su uso de pip 10 en todo el sistema, fuera de virtualenv, no es realmente compatible con Ubuntu / Debian. 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 me enfrenté a este problema, pero esto se puede resolver simplemente con 1 comando sin preocuparme por perder el 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 .

Por esto, simplemente puede instalar paquetes usando pip3 . para comprobar el uso de pip3 --version .

Para versiones anteriores, use: sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall .

Por esto, ahora puedes simplemente instalar paquetes usando pip . para comprobar el uso de pip --version .

Use python -m pip install lugar de pip install

Ejemplo:

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

El ejecutable pip (resp. pip3 ) lo proporciona su distro (paquete python-pip en Ubuntu 16.04) y se encuentra en /usr/bin/pip .

Por lo tanto, no se mantiene actualizado con el paquete pip a medida que actualiza pip, y puede fallar.

Si solo usa python -m pip directamente, por ejemplo, como en:

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

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

Se basa en el hecho de que ese archivo es ejecutable a través de la import , 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 intrépido.

Entonces recomiendo agregar los siguientes alias a tu .bashrc :

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

Probado en Ubuntu 16.04 después de una actualización de pip3 9.0.1 a 18.0.

Verifique si pip ha sido almacenado en caché en otra ruta, para hacerlo, llame a $ which pip y verifique que la ruta sea diferente de la indicada en el error, si ese es el caso, ejecute:

 $ hash -r 

Cuando el caché esté limpio, pip volverá a funcionar. referencia: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory

Estoy corriendo en un sistema donde tengo sudo apt pero no sudo pip. (Y no tengo acceso). Me metí en esta misma situación siguiendo los consejos de pip:

Está utilizando la versión 8.1.1 de pip, sin embargo, 18.0 está disponible. Debe considerar la actualización a través del comando ‘pip install –upgrade pip’.

Ninguna de las otras correcciones funcionó para mí, porque no tengo suficientes privilegios de administrador. Sin embargo, un par de cosas me impidieron leer sobre esto:

  • No debería haber hecho esto. Claro, pip me dijo que lo hiciera. Mintió
  • El uso de –user resuelve muchos problemas al centrarse en el directorio solo para usuarios.

Entonces, encontré esta línea de comando para trabajar y revertirme a donde estaba. Si estaba usando una versión diferente a la 8.1.1, obviamente querrá cambiar esa parte de la línea.

 python -m pip install --force-reinstall pip==8.1.1 --user 

Eso es lo único que funcionó para mí, ¡pero funcionó perfectamente!

Puedes resolver este problema reinstalando pip.

Use uno de los siguientes comandos de la línea de comandos para reinstalar pip:

Python2:

 python -m pip uninstall pip && sudo apt install python-pip --reinstall 

Python3:

  python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall 

Los comandos anteriores no funcionaron para mí, pero fueron muy útiles:

 sudo apt purge python3-pip sudo rm -rf '/usr/lib/python3/dist-packages/pip' sudo apt install python3-pip cd cd .local/lib/python3/site-packages sudo rm -rf pip* cd cd .local/lib/python3.5/site-packages sudo rm -rf pip* sudo pip3 install jupyter 

Yo uso sudo apt remove python3-pip luego pip funciona.

  ~ sudo pip install pip --upgrade [sudo] password for sen: Traceback (most recent call last): File "/usr/bin/pip", line 9, in  from pip import main ImportError: cannot import name 'main' ➜ ~ sudo apt remove python3-pip Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: libexpat1-dev libpython3-dev libpython3.5-dev python-pip-whl python3-dev python3-wheel python3.5-dev Use 'sudo apt autoremove' to remove them. The following packages will be REMOVED: python3-pip 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. After this operation, 569 kB disk space will be freed. Do you want to continue? [Y/n] y (Reading database ... 215769 files and directories currently installed.) Removing python3-pip (8.1.1-2ubuntu0.4) ... Processing triggers for man-db (2.7.5-1) ... ➜ ~ pip Usage: pip  [options] 

Me encontré con el mismo problema en mi sistema Ubuntu 16.04. Logré arreglarlo volviendo a instalar pip con el siguiente comando:

curl https://bootstrap.pypa.io/get-pip.py | sudo python3

Lo mismo me pasó a mí en Pixelbook usando el nuevo LXC (strech). Esta solución es muy similar a la aceptada, con una diferencia sutil, que se corrigió pip3 para mí.

 sudo python3 -m pip install --upgrade pip 

Eso golpeó la versión, y ahora funciona como se esperaba.

Lo encontré aquí … Python.org: Asegúrate de que pip está actualizado

Recuperar con python3 -m pip install --user pip==9.0.1 (o la versión que funcionó)

Lo que me funcionó para corregir el error con el uso de pip3 fue:

sudo cp -v /usr/local/bin/pip3 /usr/bin/pip3

Todo funciona:

  demon@UbuntuHP:~$ pip -V pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5) demon@UbuntuHP:~$ pip2 -V pip 10.0.1 from /home/demon/.local/lib/python2.7/site-packages/pip (python 2.7) demon@UbuntuHP:~$ pip3 -V pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5) 

¿Quizás la nueva versión 10.0.1 de pip no actualiza el binario en / usr / bin?

Para Python versión 2.7, la solución de Anthony funciona perfectamente, cambiando python3 a python de la siguiente manera:

 sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall 

Truco y funciona tambien

sudo -H pip instalar lxml

Importar principal desde pip._internal

 from pip._internal import main 

Editar el código pip de

 sudo nano /usr/bin/pip3 

¡becarios! Tengo el mismo problema y lo resolví. Aquí está mi solución. Primero, cuando ejecuto pip install algo, el error salió así:

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

Entonces, cd en el archivo / usr / bin / y cat pip3 para ver el código en él. Veo esto en él:

 #!/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()) 

Y luego creo que no estaba en la ruta de instalación. Así que cd en el python3-pip, así:

 cd /.local/lib/python3.5/site-packages/pip 

ps: tienes que hacer cd en la dirección correcta en tu computadora. Luego, busco el archivo para ver las diferencias (puedes usar otras operaciones para ver el código):

 cat __main__.py 

Y vi esto:

 from __future__ import absolute_import import os import sys # If we are running from a wheel, add the wheel to sys.path # This allows the usage python pip-*.whl/pip install pip-*.whl if __package__ == '': # __file__ is pip-*.whl/pip/__main__.py # first dirname call strips of '/__main__.py', second strips off '/pip' # Resulting path is the name of the wheel itself # Add that to sys.path so we can import pip path = os.path.dirname(os.path.dirname(__file__)) sys.path.insert(0, path) from pip._internal import main as _main # isort:skip # noqa if __name__ == '__main__': sys.exit(_main()) 

Entonces, ¿puedes ver la diferencia? Puedo darme cuenta de que tengo que hacer que el archivo sea el mismo que en / usr / bin / pip3

Entonces, copié el código en /.local/lib/python3.5/site-packages/pip para reemplazar el código en / usr / bin / pip3 y el problema desaparece.

ps: pip3 o pip no tienen diferencia en este problema. Estaré feliz si mi solución resuelve tu problema!

Como dijo @cryptoboy – verifique qué versión de pip / python ha instalado

  demon@UbuntuHP:~$ pip -V demon@UbuntuHP:~$ pip2 -V demon@UbuntuHP:~$ pip3 -V 

y luego busque bibliotecas no necesarias en su carpeta .local / lib /.

Hice una copia de seguridad de la configuración cuando estaba migrando a Kubuntu más reciente y tenía la carpeta .local / lib / python2.7 / en mi directorio principal. Python instalado 3.6. Acabo de eliminar la carpeta antigua y ahora todo funciona muy bien!

Tuve el mismo error, pero python -m pip seguía funcionando, así que lo solucioné con la opción nuclear sudo python -m pip install --upgrade pip . Lo hizo por mí.

En ubuntu 18.04.1 Bionic Beaver, debe cerrar sesión y volver a iniciar sesión (no es necesario reiniciar) para obtener el entorno adecuado.

 $ sudo apt install python-pip $ pip --version pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7) $ pip install --upgrade pip $ pip --version Traceback (most recent call last): File "/usr/bin/pip", line 9, in  from pip import main ImportError: cannot import name main $ exit  $ pip --version pip 18.1 from /home/test/.local/lib/python2.7/site-packages/pip (python 2.7) 

En Debian deberás actualizar apt primero …

 sudo apt-get update -qq sudo apt-get install python-pip -qq sudo pip install pip --upgrade --quiet sudo pip2 install virtualenv --quiet 

Si omite ‘sudo apt-get update -qq’, su pip se corromperá y mostrará el error ‘no se puede encontrar el principal’.