python - app - Archivo “/ usr/bin/pip”, línea 9, en<module> desde pip import main ImportError: no se puede importar el nombre main
instalar flask en ubuntu (6)
TL; DR
La solución ''ideal'' (Ubuntu / Debian):
$ python -m pip uninstall pip
para desinstalar el nuevo pip 10 y conservar tu pip 8 parcheado provisto por Ubuntu / Debian. Para una instalación de módulos en todo el sistema, usaapt
siempre que sea posible (a menos que estés en un virtualenv), más sobre esto a continuación . En versiones más antiguas de Ubuntu / Debian, siempre agregue la--user
cuando use pip fuera de virtualenvs (se instala en~/.local/
, predeterminado en python-pip y python3-pip desde 2016).Si aún desea utilizar el nuevo pip 10 exclusivamente, hay 3 soluciones rápidas:
- simplemente vuelva a abrir una nueva sesión de bash (una nueva pestaña de terminal, o escriba
bash
) - y el pip 10 estará disponible (veapip -V
). el pip 8 de debian permanece instalado pero está roto; o -
$ hash -d pip && pip -V
para actualizar el nombre de ruta de pip en $ PATH. el pip 8 de debian permanece instalado pero está roto; o -
$ sudo apt remove python-pip && hash -d pip
(para Python 3 es python3-pip) - para desinstalar completamente el pip 8 de debian, en favor de su nuevo pip 10.
- simplemente vuelva a abrir una nueva sesión de bash (una nueva pestaña de terminal, o escriba
Nota: siempre deberá agregar el indicador de --user
a la pip 10 no provista por Debian, a menos que esté en un virtualenv. Su uso de pip 10 en todo el sistema, fuera de virtualenv, no es realmente compatible con Ubuntu / Debian. Nunca sudo pip
!
Detalles:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100
Entonces, aquí tenemos Python 2.7.12 en la máquina Ubuntu 16.04 ec2, y obtenemos ImportError: no podemos importar el nombre principal cuando intentamos usar pip. Es causado por el comando pip install --upgrade pip
: que instala la última versión de pip 10 junto con la versión pip predeterminada de Ubuntu del paquete debian python-pip de la distribución del sistema operativo (la instalación del sistema Python), sin pasar por alto el subsistema de apt
Ubuntu. Rompe el pip predeterminado de Ubuntu: el script del iniciador parcheado de debian de python-pip (instalado por el sistema a / usr / bin / pip *) intenta importar main () desde su biblioteca pip 10 recién instalada, pero con una importación diferente camino, por lo que falla.
Este error se explica con más detalle en un hilo de desarrollador del rastreador de problemas de pip, incluidas algunas soluciones propuestas, como:
El comando
$ hash -d pip
: cuando se invoca elhash
, la ruta de acceso completa de pip se determina buscando los directorios en $ PATH y se los recuerda. Cualquier nombre de ruta recordado anteriormente se descarta. La opción-d
hace que el shell "olvide" la ubicación recordada del nombre del paquete dado; oDe manera similar, simplemente puede volver a abrir una nueva sesión de bash (una nueva pestaña de terminal) para actualizar la ruta de acceso de pip en $ PATH; o
Puede usar un comando
pip2
versionado (opip3
para Python 3) en lugar depip
para invocar el/usr/bin/pip2
instalado en el sistema/usr/bin/pip2
, mientras que cualquier secuencia de comandos pip ubicada en$HOME/.local/bin
dir (pip, pip2, pip2.7) invocará su nueva versión pip 10 instalada por el usuario;También puede usar los comandos de Python versionados en combinación con el
-m
para ejecutar la copia apropiada de pip, por ejemplo:
$ python2 -m pip install --user SomePackage
# default Python 2
$ python2.7 -m pip install --user SomePackage
# específicamente Python 2.7
Esto es útil si tiene varias versiones de Python y necesita una extensión de PyPI, como su módulo MySQL-python (MySQLdb) o un Flask-MySQL, para una versión específica de Python. El conmutador--user
solo es necesario fuera de virtualenv.O bien, desinstale uno de los dos pips, ya sea instalado por el usuario o instalado por el sistema , para resolver el conflicto:
$ python -m pip uninstall pip
: para eliminar su pip instalada manualmente en favor de la versión previamente instalada de Ubuntu del paquete debian de python-pip (python3-pip para Python 3); es un poco más antiguo, pero encuentra e instala los últimos módulos de PyPI muy bien, y tiene un comando pip que funciona de forma predeterminada en $ PATH; o
$ sudo apt-get remove python-pip
- para desinstalar el pip provisto por Ubuntu en favor de su último pip 10; Si no puede acceder a él a través del comando shortpip
, simplemente agregue su directorio$HOME/.local/bin
a su variable de entorno $ PATH para usar el comandopip
(vea arriba).
Nota: Ubuntu 16.04 pip v8.1.1 y el último pip v10.0.1 producen exactamente los mismos resultados de búsqueda del índice PyPI y pueden extraer las mismas versiones de módulos;Finalmente, podría ignorar ambos puntos a favor de APT e instalar paquetes de Python en todo el sistema desde el repositorio de Ubuntu con:
$ apt search <python-package>
# oapt-cache search
en Ubuntu más antiguo
$ apt show <python-package>
# eg python-flask
$ sudo apt install <python-package>
# osudo apt-get install
Los paquetes con el prefijopython-
son para Python 2; conpython3-
son para python 3.
El método de instalación estándar de apt-get puede ser lo que necesita. Por ejemplo, en tu caso:
python-mysqldb
- interfaz de Python para MySQL <- una bifurcación de MySQLdb == MySQL-python
python-flask-sqlalchemy
- Compatibilidad con SQL Alchemy
python-pymysql
- controlador puro de MySQL para Python
De hecho, los paquetes python del repositorio de Ubuntu se preferred siempre que sea posible, particularmente en el caso de dependencias pesadas del sistema o cuando se usan en todo el system-wide . Por supuesto, la cantidad de paquetes de Python en el repositorio de Ubuntu (¡unos pocos miles!) Es relativamente menor en comparación con PyPI (y tiene solo una versión de ellos), porque cualquier repositorio de sistemas operativos se está quedando un poco por detrás de las versiones de PyPI. Pero la ventaja de APT es que todos los paquetes provistos por Ubuntu se sometieron a pruebas de integración dentro de Ubuntu, además de que apt-get resuelve rápidamente dependencias pesadas como extensiones C de forma automática. Siempre obtendrá las bibliotecas del sistema que necesita como parte de la instalación de apt, pero con pip no tiene tales garantías .
Sin embargo, es posible que APT no sea una opción si realmente solo necesita la última versión del paquete (o cierta versión anterior), o cuando solo se puede encontrar en PyPI, o cuando los módulos deben aislarse; Entonces pip es una herramienta más apropiada. Si tiene que usar el comandopip install
en Ubuntu en lugar deapt-get install
, asegúrese de que se ejecute en un entorno de desarrollo virtual aislado, como con virtualenv (sudo apt-get install python-virtualenv
), o utilizando unvenv
módulo (disponible solo en python3), o en un nivel por usuario (pip install --user
opción de comando depip install --user
), pero no en todo el sistema (¡nuncasudo pip
!).
Nota: se debe evitar el uso del comando sudo pip
(con acceso root) en Ubuntu / Debian, ya que interferes con el funcionamiento del administrador de paquetes del sistema (apt) y puede afectar a los components sistema operativo Ubuntu cuando un módulo de Python usado por el sistema se actualiza inesperadamente. Particularmente por dependencias en otro paquete pip. Se recomienda nunca usar Pip para cambiar los paquetes de Python en todo el sistema, ya que estos son gestionados por apt-get en Ubuntu.
Estos pasos me funcionaron.
1- Desinstalar la actualización pip de python.
2- Desinstalar el paquete pip de tu Ubuntu.
3- Comprueba que pip binario ya no está en tu sistema.
python -m pip uninstall pip
apt remove python-pip
whereis pip
4- Descargar e instalar pip. ( créditos para VanDragt.com )
wget https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py
sudo python3 /tmp/get-pip.py
pip install --user pipenv
pip3 install --user pipenv
echo "PATH=$HOME/.local/bin:$PATH" >> ~/.profile
source ~/.profile
whereis pip
Ahora deberías poder instalar cualquier paquete pip que desees.
Mi centavo, tuve el mismo ImportError: cannot import name main
.
Mi sistema es una distribución Linux Ubuntu , he ejecutado este comando:
python -m pip uninstall pip
Esto ha eliminado una versión pip
local (para el usuario).
Ya tenía un antiguo ejecutable de sistema pip
/ pip2
( apt-get
instalado en la antigüedad) que funcionaba a la perfección.
Prueba esto
Comprueba la versión de python que usas.
# Python --version
e intente instalar, por ejemplo, si su versión es 2.7
#python2.7 <package name>
Funcionará bien ......
Como se sugiere en el tema de github de pip
La solución temporal es -
Edite su archivo /usr/bin/pip
y comente la línea principal de importación y edítelo
#from pip import main
from pip._internal import main as main
Funcionó perfectamente para mí. Nota: esta es una solución temporal . Espera a que el equipo pip arregle esto.
O
from pip import main
if __name__ == ''__main__'':
sys.exit(main())
a esto:
from pip import __main__
if __name__ == ''__main__'':
sys.exit(__main__._main())
Como se sugiere en esta respuesta SO .
sudo easy_install MySQL-python puede ayudar o intentarlo;
sudo yum instalar mysql-devel python-devel MySQL-python
Consulte este tutorial para obtener ayuda,