web-dev-qa-db-ja.com

Pip3 ImportErrorの実行:名前 'main'をインポートできません

Scipyをインストールしたい(すでにNumpyがインストールされている)。 OSおよびIDLE3(3.5.2)と共にPython 3.5.1-3がインストールされています。ターミナルに当たったとき

Sudo pip3 install scipy

印刷する

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

私はすでにpip3を再インストールしてOSを再起動しようとしましたが、それは変わりませんでした。 pip3は他の誰かと奇妙に働いていますか?

numpyとscipyは、現在サポートされているUbuntuのすべてのバージョンのデフォルトリポジトリにあります。 Python 3.xのnumpyとscipyをインストールするには、ターミナルを開いて次のように入力します。

Sudo apt update    
Sudo apt install python3-numpy python3-scipy  

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
8
karel

python -m pip installの代わりにpip installを使用

例:

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

pipアップグレード後にこの問題が発生し始めました:

pip install --upgrade --user pip

pip(またはpip3)実行可能ファイルは、ディストリビューション(Ubuntu 16.04のpython-pipパッケージ)によって提供されます。

したがって、pipをアップグレードするときにpipパッケージ自体で最新状態に保たれず、破損する可能性があります。

python -m pipを直接使用する場合、たとえば次のように:

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

Pythonパスを調べて、最新バージョンのpipを見つけ、そのファイルを実行します。

それは、そのファイルが実行可能であるという事実に依存していますが、それは非常に標準的なタイプのインターフェースであり、したがって、ハッカーのDebianスクリプトよりも壊れにくいです。

次に、.bashrcに次のエイリアスを追加することをお勧めします。

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

pip3 9.0.1から18.0への更新後、Ubuntu 16.04でテスト済み。

バグはpip 10.0.0にあります。

Linuxでは、次のファイルを変更する必要があります:/ usr/bin/pip from:

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

これに:

from pip import __main__
if __== '__main__':
    sys.exit(__main__._main())
15
Herman

Karelは「numpy and scipyのインストール」の問題を解決したかもしれませんが、システムのpipの問題は解決されていないため、pipの今後の問題がさらに増えるでしょう。

こちら を見ると、Ubuntuシステムでのpip 10での最近の非常に一般的な問題のようです。そのスレッドであなたのために働くいくつかの回避策を見つけるかもしれませんが、うまくいけばアップデートがすぐにそれを修正するでしょう。

6
JMAA

私も同じ問題を抱えていましたが、aptとpipでアンインストールして再インストールしてもうまくいきませんでした。

Pip3パスを回復する簡単な方法を提供する別のソリューションを見ました:

Sudo python3 -m pip uninstall pip && Sudo apt install python3-pip --reinstall
2
Hamza Ali

Aptとpipの両方からpipをインストールすると、これが発生する可能性があります。

私の場合、Ubuntuのpipパッケージを使用してpipenvをインストールし、pipenvがpipの新しいコピーをインストールしました。シェルがUbuntuのpip 9スクリプトを実行して(which pip3を実行することを確認する)、Pythonインタープリターがpip 10モジュールをインポートするため、pip3コマンドは失敗します。したがって、2つのうちの1つをアンインストールします。

理由により新しいピップを持っていると仮定するのは公平です。その場合、次のように古いpipをアンインストールします。

Sudo apt remove python3-pip

古いpipで問題がなく、システムパッケージを好むことが確実にわかっている場合は、新しいパッケージをアンインストールする必要があります。

~/.local/bin/pip3 uninstall pip

またはそれが失敗する

Sudo /usr/local/bin/pip3 uninstall pip

1
Jeff C

タイプ

hash -d pip3

これにより、このエラーが削除されます。

1
Bob

私の問題は、python3.6と3.7の間の不一致でした。 python3.6にインストールすると、システムがpython3.7にアップグレードされたにもかかわらず、/usr/bin/python3 -> /usr/bin/python3.6にリンクが設定されました。

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
0

this githubページに示されているように、pipの強制再インストールは、ほとんどのユーザーにとってうまく機能します。

python -m pip install --force-reinstall pip
0
subtleseeker