Executando o Pip3 ImportError: não é possível importar o nome 'main'


21

Quero instalar o Scipy (o Numpy já está instalado). Eu tenho o Python 3.5.1-3 instalado com o sistema operacional e o IDLE3 (3.5.2). Quando eu bati no terminal

sudo pip3 install scipy

Imprime

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

Eu já tentei reinstalar o pip3 e reiniciar o sistema operacional, mas não mudou. O pip3 tem trabalhado estranhamente com outra pessoa?

Respostas:


10

numpy e scipy estão nos repositórios padrão de todas as versões atualmente suportadas do Ubuntu. Para instalar numpy e scipy para Python 3.x, abra o terminal e digite:

sudo apt update    
sudo apt install python3-numpy python3-scipy  

Para o Python 2.x, é:

sudo apt update  
sudo apt install --no-install-recommends python2.7-minimal python2.7 # this line is only necessary for Ubuntu 17.10 and later 
sudo apt install python-numpy python-scipy

11
python3-scipy funcionou muito bem. Obrigado!
A invertível cão Hog

11
Como outra resposta afirma, essa resposta não está relacionada ao problema subjacente, que tem a ver com pip.
precisa saber é o seguinte

É um método ruim ...
darkwoolf 10/12

26

Use em python -m pip installvez depip install

Exemplo:

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

Comecei a obter esse problema após uma pipatualização:

pip install --upgrade --user pip

O executável pip(resp. pip3) É fornecido pela sua distribuição ( python-pippacote no Ubuntu 16.04).

Portanto, ele não é mantido atualizado com o pippróprio pacote à medida que você atualiza o pip e pode quebrar.

Se você apenas usar python -m pipdiretamente, por exemplo, como em:

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

ele percorre o caminho do Python e encontra a versão mais recente do pip e executa esse arquivo.

Ele se baseia no fato de que esse arquivo é executável, mas esse é um tipo de interface muito padrão e, portanto, menos provável de quebrar do que o script Debian mais hackier.

Então, recomendo adicionar os seguintes aliases ao seu .bashrc:

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

O /usr/bin/pip3arquivo Ubuntu 18.04 faz:

from pip import main

e, presumivelmente, mainfoi removido de pipalgum ponto que foi o que quebrou as coisas.

A confirmação do pip de interrupção parece ser: 95bcf8c5f6394298035a7332c441868f3b0169f4 "Mova todas as APIs internas para pip._internal", que foi introduzido no pip 18.0.

Testado no Ubuntu 16.04 após uma atualização de pip39.0.1 para 18.0.

pyenv

No final das contas, no entanto, para desenvolvimento sério do Python, eu recomendaria apenas que você instale o seu próprio Python local com pyenv + virtualenv, que também contornaria esse bug do Ubuntu: Como instalar uma versão diferente do Python usando o apt-get?


11
Então isso funciona, mas não posso ser o único que está balançando a cabeça aqui. Onde está o colapso? Por que a atualização do pip padrão falha ao configurar o novo pip de uma maneira que continue funcionando?
Steven Lu

@StevenLu meu entendimento é que /usr/bin/pipé fornecido por um pacote Ubuntu Python e pipnão o substitui. Mas ele pip updateé gerenciado por pipsi só e evita tocar nos arquivos do Ubuntu.
Ciro Santilli escreveu: 19/09/09

Oi ho mesma experiência aqui. O Pip3 NÃO funcionaria, não importa o que eu fiz. Esta solução funciona, mas como pode? O script pip python é preparado por Debian--O comentário diz: 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. Talvez haja uma maneira de instalar o Python corretamente de maneira python.
será

@will Não tenho certeza sobre esse comentário da documentação, mas tenho certeza do que o código /usr/bin/pipfaz :-)
Ciro Santilli

20

O bug é encontrado no pip 10.0.0.

No linux, você precisa modificar o arquivo: / usr / bin / pip de:

from pip import main
if __name__ == '__main__':
    sys.exit(main())

para isso:

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())

Esse estilo de solução alternativa não parece recomendado pela pipequipe.
jdk1.0

Você salvou o meu dia !!
Saurabh Singh

8

Eu tive o mesmo problema, mas desinstale e reinstale com o apt e o pip não funcionou para mim.

Eu vi outra solução que apresenta uma maneira fácil de recuperar o caminho do pip3:

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

Isso rebaixou minha versão do pip3 de 19.0.3 para 8.1.1, mas corrigiu o sintoma.
Hawkeye Parker

6

Embora karel possa ter resolvido o problema "instalar numpy e scipy", o que há de errado com o pip no seu sistema não foi solucionado, então você provavelmente terá mais problemas com o pip daqui para frente.

Olhando aqui , parece ser um problema recente bastante comum com o pip 10 nos sistemas Ubuntu. Você pode encontrar algumas soluções alternativas nesse segmento que funcionem para você, mas espero que uma atualização o corrija em breve.


Obrigado por realmente corrigir o problema e não dando uma solução alternativa que só resolve o problema parcialmente e por apenas uma única pessoa ...
Caleb Fenton

2

A instalação do pip do apt e do próprio pip pode causar isso.

No meu caso, usei o pacote pip do Ubuntu para instalar o pipenv, que instalou uma cópia mais recente do pip. Agora, porque meu shell executa o script pip 9 do Ubuntu (para verificar a execução which pip3) e meu interpretador Python importa o módulo pip 10, o comando pip3 falha. Então, eu quero desinstalar um dos dois.

É justo supor que você tenha o pip mais novo por um motivo. Nesse caso, você deseja desinstalar o pip antigo da seguinte maneira:

sudo apt remove python3-pip

Se você tem certeza de que está bem com o pip mais antigo e prefere o pacote do sistema, desinstale o mais novo:

~/.local/bin/pip3 uninstall pip

ou na sua falta

sudo /usr/local/bin/pip3 uninstall pip


1

tipo

hash -d pip3

Isso deve remover este erro


3
Você poderia dar mais explicações sobre sua resposta: o que é 'hash' e por que ele removeria o erro?
Marc Vanhoomissen 03/07

1

Forçar a reinstalação do pip funciona bem para a maioria dos usuários, como mostrado nesta página do github:

python -m pip install --force-reinstall pip

obrigado. Todas as respostas anteriores falharam miseravelmente, enquanto as suas funcionaram
Pynchia 15/10

0

Meu problema acabou sendo uma incompatibilidade entre python3.6 e 3.7. A instalação do python3.6 colocou um link, /usr/bin/python3 -> /usr/bin/python3.6mesmo que o sistema tenha sido atualizado para python3.7.

sudo apt purge python-pip
sudo apt purge python3-pip
sudo apt install python3.7 --reinstall
cd /usr/bin
sudo rm python3
sudo ln -s python3.7 python3
python3 --version
pip3 --version

-1

Isso funcionou para mim:

pip install --upgrade --user pip

Por install --upgrade, quero dizer o que você está tentando instalar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.