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

Cada vez que trato de instalar cualquier paquete usando pip, estoy recibiendo 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é da este error. He buscado sobre este error, pero no puedo encontrar nada para solucionarlo.

Por favor, hágamelo saber si necesita más detalles, voy a actualizar mi pregunta.

Solución

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

pip 10.x ajusta la ubicación de sus componentes internos. El comando pip3 que está viendo es uno proporcionado por su mantenedor de paquetes (presumiblemente basado en debian aquí?) y no es un archivo gestionado por pip.

Puede leer más sobre esto en pip's issue tracker

Probablemente querrá no actualizar su sistema pip y en su lugar utilizar un virtualenv.

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

Si quiere continuar en "territorio no soportado" (actualizar un paquete del sistema fuera del gestor de paquetes del sistema), probablemente puede salirse con la suya con python3 -m pip ... en lugar de pip3.

Comentarios (17)

Compruebe si pip se ha almacenado en caché en otra ruta, para ello, llame a $ which pip y compruebe que la ruta es diferente a la que se indica en el error, si ese es el caso ejecute:

$ hash -r

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

Comentarios (0)

Yo uso sudo apt remove python3-pip y 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]
Comentarios (1)