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


21

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は他の誰かと奇妙に働いていますか?

回答:


10

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

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

1
python3-scipyは問題なく動作しました。ありがとう!
可逆豚犬

1
別の答えが述べているように、この答えは、pipに関係する根本的な問題とは関係ありません。
チャウビン

それは悪い方法です...
darkwoolf

26

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)の実行可能ファイルは、ディストリビューション(から提供されたpython-pipUbuntuの16.04のパッケージ)。

そのため、pippipをアップグレードしてもパッケージ自体の最新の状態に保たれず、破損する可能性があります。

たとえば、次のように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 "$@" )

Ubuntu 18.04 /usr/bin/pip3ファイルには次の機能があります。

from pip import main

おそらくある時点でmain削除されpip、それが物事を壊したのです。

破壊的なpipコミットは次のように見えます:95bcf8c5f6394298035a7332c441868f3b0169f4「すべての内部APIをpip._internalに移動」し、pip 18.0に入りました。

pip39.0.1から18.0への更新後にUbuntu 16.04でテスト済み。

pyenv

最終的には、深刻なPython開発のために、pyenv + virtualenvを使用して独自のローカルPythonをインストールすることをお勧めします。これにより、このUbuntuのバグも回避できます。apt -getを使用して別のPythonバージョンをインストールする方法はありますか?


1
これでうまくいきますが、ここで頭を振っているのは私だけではありません。内訳はどこですか?デフォルトのpipアップグレードが、新しいpipのセットアップに失敗し、動作し続けるのはなぜですか?
スティーブンルー

@StevenLuは/usr/bin/pip、Ubuntu Pythonパッケージによって提供されるものであり、pip上書きしないことを理解しています。しかし、それはそれ自体でpip update管理されpipており、Ubuntuファイルに触れないようにします。
Ciro Santilli新疆改造中心法轮功六四事件

こんにちは、ここで同じ経験。Pip3は、私が何をしたとしても機能しません。このソリューションは機能しますが、どうしてですか?python pipスクリプトは、次のように準備されDebianます。コメント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. には、次のように書か れています。
意志

@そのドキュメントのコメントについてはわかりませんが、コードが何をするかは確かです/usr/bin/pip:-)
Ciro Santilli新疆改造中心法轮功六四事件

20

バグはpip 10.0.0にあります。

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

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

これに:

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

このスタイルの回避策は、チームによって推奨されていないようですpip
jdk1.0

あなたは私の一日を救った!
Saurabhシン

8

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

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

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

これにより、pip3のバージョンが19.0.3から8.1.1にダウングレードされましたが、症状は修正されました。
ホークアイパーカー

6

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

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


...実際に仕事の周りの一部のみとだけ一人のための問題を解決することをを与える問題を修正していないをありがとう
カレブフェントン

2

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

私の場合、Ubuntuのpipパッケージを使用してpipenvをインストールし、pipenvがpipの新しいコピーをインストールしました。シェルがUbuntuのpip 9スクリプト(runを確認するため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

タイプ

hash -d pip3

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


3
あなたの答えについてもっと説明してもらえますか:「ハッシュ」とは何ですか?なぜエラーを取り除くのですか?
マークヴァンホーミセン

1

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

python -m pip install --force-reinstall pip

ありがとうございました。以前の回答はすべて惨めに失敗しましたが、あなたの回答は機能しました
Pynchia

0

私の問題は、python3.6と3.7の不一致になりました。/usr/bin/python3 -> /usr/bin/python3.6システムがpython3.7にアップグレードされていても、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

-1

これは私のために働いた:

pip install --upgrade --user pip

によってinstall --upgrade、私はあなたがインストールしようとしているものを意味します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.