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

Siempre que intento instalar cualquier paquete usando pip, aparece este error de importación:

[email protected]:~$ 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'


[email protected]:~$ 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())

Funcionaba bien antes, no estoy seguro de por qué arroja este error. He buscado sobre este error, pero no encuentro nada para solucionarlo.

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

Answer

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

pip 10.x ajusta la ubicación de sus componentes internos. El pip3comando que está viendo es uno proporcionado por el mantenedor de su paquete (¿presumiblemente basado en Debian aquí?) Y no es un archivo administrado por pip.

Puede leer más sobre esto en el rastreador de problemas de pip

Probablemente desee no actualizar el pip de su sistema y en su lugar usar un virtualenv.

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

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

Podemos borrar el error modificando el archivo pip.

Verifique la ubicación del archivo:

$ which pip

path -> /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 escribir los cambios y salir

¡Espero que esto funcione!

Para usuarios de la familia Ubuntu, Debian y Linux Mint

Gracias a la explicación de Anthony anterior , puede conservar el 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 python3-pippaquete debian (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 sin problemas. Tiene un pipcomando de trabajo (ya en $ PATH), además de la buena --useropción parcheada de forma predeterminada desde 2016. En cuanto a las notas de la versión de pip , las versiones más nuevas se refieren principalmente a 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 Python virtualenvs, 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)

Quick apt syntax reminder (please see man apt for details):
$ sudo apt update (to resync Ubuntu package index files from up-to-date sources)
$ apt search <python-package-name> (full text-search on all available packages)
$ apt show <python-package-name> (displays the detailed package description)
$ sudo apt install <python-package-name>

Los nombres de 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 de usuario ( pip install --useropción) o dentro de virtualenv / venv, apt podría ser lo que necesita. Estos paquetes de sistema también son accesibles desde envs virtuales, ya que virtualenv recurrirá con gracia al uso de bibliotecas del sistema en la importación si sus envs no han proporcionado copias de los módulos. Los --usermó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 con scipy o matplotlib), ya que APT realizará un seguimiento y proporcionará todas las bibliotecas del sistema y extensiones C requeridas, mientras que con pip no tiene tales garantías .

De hecho, para los paquetes de Python en todo el sistema (a diferencia de por usuario, nivel de directorio de inicio o inferior), Ubuntu espera usar el administrador de paquetes APT (en lugar de sudo pip) para evitar romper 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 por apty no deben cambiarse.

Entonces, si usa el pip3 installcomando, 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 en un nivel por usuario ( --useropción pip, predeterminada en Ubuntu pip desde 2016), pero no en todo el sistema ( sudo pip3¡ nunca !), 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 usado por el sistema se cambia inesperadamente. ¡Buena suerte!


P. S. Todo lo anterior es para la solución 'ideal' (estilo 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 tipo bash) - y pip3 v10 estará disponible (ver pip3 -V). pip3 v8 de Debian permanece instalado pero no funciona; o
  • el comando $ hash -d pip3 && pip3 -V para actualizar el nombre de ruta pip3 en $ PATH. pip3 v8 de Debian permanece instalado pero no funciona; o
  • el comando $ sudo apt remove python3-pip && hash -d pip3para desinstalar pip3 v8 de Debian por completo, a favor de su nuevo pip3 v10.

Nota: ¡Siempre necesitará agregar una --userbandera a cualquier pip no proporcionado por Debian, a menos que esté en un virtualenv! (despliega paquetes de python ~/.local/, por defecto en python3-pip y python-pip provistos por debian / ubuntu desde 2016). Su uso de pip 10 en todo el sistema, fuera de virtualenv, no es realmente compatible con Ubuntu / Debian. sudo pip3¡ Nunca !

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 un comando sin molestarme y 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.

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.

Usar en python -m pip installlugar depip install

Ejemplo:

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

El ejecutable pip(resp. pip3) Lo proporciona su distribución ( python-pippaquete en Ubuntu 16.04) y se encuentra en /usr/bin/pip.

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

Si solo 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, encuentra la última versión de pip y ejecuta ese archivo.

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

Entonces recomiendo agregar los siguientes alias a su .bashrc:

pip() ( python -m pip "[email protected]" )
pip3() ( python3 -m pip "[email protected]" )

El /usr/bin/pip3archivo de Ubuntu 18.04 hace:

from pip import main

y presumiblemente mainfue removido pipen algún momento que es lo que rompió las cosas.

La confirmación de pip de ruptura 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 un 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: https://askubuntu.com/questions/682869/how-do-i- instalar-una-versión-de-python-diferente-usando-apt-get / 1195153 # 1195153

Puede resolver este problema reinstalando pip.

Utilice uno de los siguientes comandos de línea de comando 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

Verifique si pip se ha almacenado en caché en otra ruta, para hacerlo, llame a $ which pip y verifique que la ruta sea diferente a la que se le solicitó 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 en el que tengo sudo apt pero no sudo pip. (Y no su acceso). Me metí en esta misma situación siguiendo el consejo de pip:

You are using pip version 8.1.1, however 18.0 is available. You should consider upgrading via the 'pip install --upgrade pip' command.

Ninguna de las otras correcciones me funcionó, porque no tengo suficientes privilegios de administrador. Sin embargo, algunas cosas se me quedaron al 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 exclusivo para el usuario.

Entonces, encontré que esta línea de comando funciona para 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!

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

Encontré el mismo problema en mi sistema Ubuntu 16.04. Logré solucionarlo reinstalando pip con el siguiente comando:

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

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

sudo python3 -m pip install --upgrade pip

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

Lo encontré aquí ... Python.org: asegúrese de que pip esté actualizado

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

En ubuntu 18.04.1 Bionic Beaver, debe cerrar la sesión y volver a iniciarla (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 <module>
    from pip import main
ImportError: cannot import name main

$ exit
<login>

$ pip --version
pip 18.1 from /home/test/.local/lib/python2.7/site-packages/pip (python 2.7)

Yo uso sudo apt remove python3-pip luego pipfunciona.

 ~ sudo pip install pip --upgrade
[sudo] password for sen: 
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    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 <command> [options]

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

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

Lo que funcionó para mí para corregir el error con el uso pip3fue:

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

Todo funciona:

 [email protected]:~$ pip -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

 [email protected]:~$ pip2 -V
 pip 10.0.1 from /home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)

 [email protected]:~$ 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? (que parece que no)

EDITAR: el mismo problema ocurre en Ubuntu 18.04. La mejor solución que he encontrado es enlazar simbólicamente los binarios pip de /home/<user/.local/bina /usr/local/bino /usr/bin(según su preferencia), de la siguiente manera:

ln -sv /home/<user>/.local/bin/pip /usr/local/bin/pip
ln -sv /home/<user>/.local/bin/pip2 /usr/local/bin/pip2
ln -sv /home/<user>/.local/bin/pip2.7 /usr/local/bin/pip2.7
ln -sv /home/<user>/.local/bin/pip3 /usr/local/bin/pip3
ln -sv /home/<user>/.local/bin/pip3.6 /usr/local/bin/pip3.6

NOTA: reemplácelo <user> con su usuario actual en ejecución

Las versiones asociadas (más recientes) están en:

Versión 3.6:

/home/demon/.local/lib/python3.6/site-packages/pip (python 3.6)

Versión 2.7:

/home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)

Truco y funciona también

sudo -H pip install lxml

Tuve este mismo error, pero python -m pipaún funcionaba, así que lo solucioné con la opción nuclear sudo python -m pip install --upgrade pip. Lo hizo por mí.

Por lo que vale, tuve el problema con pip(no pip2o pip3):

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

$ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip3 -V
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

De alguna manera (no recuerdo cómo) tenía cosas de Python instaladas en mi ~/.localdirectorio. Después de eliminar el directorio pip de allí, pipcomencé a trabajar nuevamente.

$ rm -rf /home/precor/.local/lib/python2.7/site-packages/pip
$ pip -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

¿Hay algún problema con los paquetes? Al generar el archivo / usr / bin / pip, debes cambiar la importación:

from pip import main

para

from pip._internal import main

Eso resuelve el problema, no estoy seguro de por qué se generó, pero dice algo en el siguiente problema:

Después de la actualización de pip 10 en pyenv "ImportError: no se puede importar el nombre 'principal'"

Puedes probar esto:

sudo ln -sf $( type -P pip ) /usr/bin/pip

También me encontré con este problema cuando quería actualizar el sistema pip pip3de 9.0.1 a 19.2.3.

Después de ejecutarse pip3 install --upgrade pip, la pipversión se convierte en 19.2.3. Pero main()ha sido trasladado en pip._internalla última versión, que deja pip3roto.

Entonces, en el archivo /usr/bin/pip3, reemplace line 9: from pip import maincon from pip._internal import main. El problema se solucionará, funciona igual para python2-pip. (Probado en la distribución Ubuntu 18.04)

Según la respuesta de @Vincent H.

Ejecute los siguientes comandos para corregirlo. Después de ejecutarlo python3 -m pip install --upgrade pip, ejecute el siguiente comando.

hash -r pip

Fuente: https://github.com/pypa/pip/issues/5221

simplemente puede arreglar las rutas pip y pip3 usando update-alternatives

Lo primero que debe verificar es su $PATH ejecución actual echo $PATHy ver si puede encontrar /usr/local/bincuál es donde generalmente están pip3 y pip

hay un cambio de su sistema está mirando aquí /bin/pipy /bin/pip3 por lo que se puede decir fijar el PATH añadiendo a su ~/.bash_profilearchivo por lo que persiste

export PATH=$PATH:/usr/local/bin y luego verifique si está arreglado con which pipywhich pip3

si no, utilícelo update-alternativespara arreglarlo finalmente

update-alternatives --install /bin/pip3 pip3 /usr/local/bin/pip3 30

y si quieres apuntar pip a pip3 entonces

update-alternatives --install /bin/pip pip /usr/local/bin/pip3 30

¡Esto funcionó para mí!

hash -r pip # or hash -d pip

Ahora, desinstale la versión instalada de pip y vuelva a instalarla usando los siguientes comandos.

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

Si la pepita está rota, use:

python -m pip install --force-reinstall pip

¡Espero eso ayude!

Usé el siguiente código para cargar un módulo que podría necesitar instalación, evitando así este error (que también obtuve), usando el último Python y el último pip sin problemas

try
  from colorama import Fore, Back, Style
except:
  !pip install colorama
  from colorama import Fore, Back, Style

importar main desde pip._internal

from pip._internal import main

Edite el código pip de

sudo nano /usr/bin/pip3

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

 [email protected]:~$ pip -V
 [email protected]:~$ pip2 -V
 [email protected]:~$ pip3 -V

y luego verifique si hay bibliotecas no necesarias en su carpeta .local / lib /.

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

En Debian, primero deberá actualizar apt ...

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 la página principal'.

Este error puede deberse a un permiso. Entonces, pruebe ejecutando el comando con la bandera -H :

sudo -H pip3 install numpy