web-dev-qa-db-ja.com

Pipのアップグレード後のエラー:名前 'main'をインポートできません

私がpipを使ってパッケージをインストールしようとするときはいつでも、私はこのインポートエラーを得ています:

[email protected]:~$ 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'


[email protected]:~$ 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 __== '__main__':
    sys.exit(main())

それは以前はうまくいっていました、なぜそれがこのエラーを投げているのか私にはわかりません。

詳細が必要な場合はお知らせください。質問を更新します。

232
g_p

システムピップを誤ってアップグレードしたに違いありません(おそらくSudo pip install pip --upgradeのような方法で)。

pip 10.xは、その内部が配置されている場所を調整します。あなたが目にしているpip3コマンドはあなたのパッケージメンテナによって提供されたもの(おそらくここにあるdebian?)であり、pipによって管理されるファイルではありません。

あなたはこれについてもっと読むことができます pipのissue tracker

あなたはおそらくシステムのpipをnotアップグレードして代わりにvirtualenvを使うことを望むでしょう。

pip3バイナリを復元するには、Sudo python3 -m pip uninstall pip && Sudo apt install python3-pip --reinstallが必要です。

「サポートされていない地域」(システムパッケージマネージャの外でシステムパッケージをアップグレードする)を継続したい場合は、おそらくpython3 -m pip ...の代わりにpip3を使うことができます。

494
Anthony Sottile

Ubuntuファミリー、Debian、Linux Mintユーザー向け

Anthonyの説明 above のおかげで、元のシステムpip(/ usr/bin /およびdist-packages /)を保持し、手動でインストールしたpip(〜/ .local /)を削除して解決できます紛争:

$ python3 -m pip uninstall pip

Ubuntu/Debian pip v8.1.1(16.04)from python3-pip debianパッケージ(see$ pip3 -V)は、最新のpip v10.0.1と同じ検索結果を表示し、PyPIから最新のモジュールをインストールします。動作中のpipコマンド(既に$ PATHにあります)に加えて、2016年以降デフォルトでパッチされたNice --userオプションがあります。 pip release notes バージョンは主にユースケース固有のバグ修正と特定の新機能に関するものであるため、not誰もがまだpipをアップグレードする必要があります。とにかく、新しいpip 10はPython virtualenvsにデプロイできます。

ただし、pipに関係なく、OSでは、pipを使用せずに、APTを使用して一般的なPythonモジュール(numpyを含む)を迅速にインストールできます。
$ Sudo apt install python3-numpy python3-scipy(システム依存関係あり)
$ Sudo apt install python3-pip(Debianパッチを適用したpip、やや古いが重要ではありません)

クイックapt構文のリマインダー(詳細についてはman aptをご覧ください):
$ Sudo apt update(最新のソースからUbuntuパッケージのインデックスファイルを再同期するため)
$ apt search <python-package-name>(利用可能なすべてのパッケージの全文検索)
$ apt show <python-package-name>(詳細なパッケージの説明を表示)
$ Sudo apt install <python-package-name>

python-というプレフィックスが付いたパッケージ名はPython 2用です;接頭辞python3-はPython 3用です(例:python3-pandas)。数千があり、DebianとUbuntu内で統合テストを受けています。ユーザーごとのレベル(pip install --userオプション)またはvirtualenv/venv内にインストールする場合を除き、aptが必要な場合があります。 virtualenv は、envがモジュールのコピーを指定していない場合、インポート時にシステムライブラリの使用に正常にフォールバックするため、これらのシステムパッケージは仮想envからもアクセスできます。カスタムインストール(pip --user)ごとの~/.local/libのユーザーごとのモジュールもオーバーライドします。

これは システム全体 インストールであるため、それらを削除する必要はほとんどありません(OSの依存関係に注意する必要があります)。これは、APTが追跡し、必要なすべてのシステムライブラリとC拡張を提供するため、多くのシステム依存関係があるパッケージ(scipyやmatplotlibなど)に便利ですが、pipでは no such保証

実際、システム全体のPythonパッケージ(ユーザーごと、ホームディレクトリレベル、またはそれ以下)とは対照的に、Ubuntu expects APTパッケージを使用OSの破損を避けるためのマネージャー(Sudo pipではなく):Sudo pip3は、APTがOS依存のモジュールを格納する非常に同じ/usr/lib/python3/dist-packagesディレクトリをターゲットにします。最近のDebian/UbuntuリリースはPython 3に大きく依存しているため、プレインストールされたモジュールはaptによって管理されており、変更しないでください。

したがって、pip3 installコマンドを使用する場合は、 virtualenvSudo apt install python3-virtualenv)やPython3ビルトイン(-m venv)、またはユーザーごとのレベル(--user pipオプション、2016年以降のUbuntu提供のpipのデフォルト)、ただしnotシステム全体(決してSudo pip3!)、なぜならpip 干渉 APTパッケージマネージャーの操作であり、Ubuntu OSに影響を与える可能性がある コンポーネント used pythonモジュールが予期せず変更されました。がんばろう!


P。S。上記はすべて「理想的な」解決策です(Debian/Ubuntuの方法)。

still新しいpip3 v10のみを使用する場合、3つの簡単な回避策があります。

  • 新しいbashセッションを開く(新しいターミナルタブ、またはbashと入力)-pip3 v10が使用可能になります(pip3 -Vを参照)。 debianのpip3 v8はインストールされたままですが、壊れています。または
  • コマンド$ hash -d pip3 && pip3 -Vは、$ PATHのpip3パス名を更新します。 debianのpip3 v8はインストールされたままですが、壊れています。または
  • コマンド$ Sudo apt remove python3-pip && hash -d pip3は、新しいpip3 v10を優先して、debianのpip3 v8を完全にアンインストールします。

注:virtualenvにいる場合を除き、常に--userフラグをdebian以外で提供されるpipに追加する必要があります! (pythonパッケージを~/.local/にデプロイします。デフォルトは、debian/ubuntuが提供するpython3-pipおよびpython-pipで2016年以降です)。 virtualenv以外のシステム全体でのpip 10の使用は、Ubuntu/Debianでは実際にはサポートされていません。決してSudo pip3

詳細:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-3816731

58
Alexey C.

pipファイルを修正することでエラーを解消できます。

ファイルの場所を確認してください。

$ which pip

パス - >/usr/bin/pip

その場所( /usr/bin/pip )に移動してターミナルを開きます。 

$ Sudo nano pipを入力してください

あなたは見ることができます:

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

への変更:

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

それから ctrl + o 変更を書いて終了する 

これがうまくいくことを願っています!

43
vijay athithya

一歩だけで解決。

私もこの問題に直面していましたが、これは面倒で時間を無駄にすることなく1つのコマンドで解決することができ、私は複数のシステムでそれを試してみました。そしてそれは:

Python3の場合: - Sudo python3 -m pip uninstall pip && Sudo apt install python3-pip --reinstall

これにより、pip3を使って簡単にパッケージをインストールすることができます。チェックするにはpip3 --versionを使います。

古いバージョンの場合は、Sudo python -m pip uninstall pip && Sudo apt install python-pip --reinstallを使用します。

これで、pipを使ってパッケージをインストールすることができます。チェックするにはpip --versionを使います。

27
Saket

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

例:

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

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

したがって、あなたがpipをアップグレードするとき、それはpipパッケージ自体によって最新に保たれず、そして壊れるかもしれません。

python -m pipを直接使用するだけの場合は、のように:

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

それはあなたのPythonパスを通り抜けて最新バージョンのpipを見つけ、そのファイルを実行します。

それはそのファイルがimportを通して実行可能であるという事実に依存します、しかしそれは非常に標準的なタイプのインターフェースであり、そしてそれ故により危険なDebianスクリプトより壊れる可能性が少ないです。

それから私はあなたの.bashrcに以下のエイリアスを追加することをお勧めします:

pip() ( python -m pip "[email protected]" )
pip3() ( python3 -m pip "[email protected]" )

pip3 9.0.1から18.0へのアップデート後のUbuntu 16.04でテスト。

Pipが別のパスにキャッシュされているかどうかを確認するには、 $ which pip を呼び出して、パスがエラーで指示されたものと異なることを確認します。

$ hash -r

キャッシュがクリアされると、pipは再び機能します。 reference: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such -file-or-directory

13
Sr.PEDRO

私はSudo aptがあるがSudo pipがないシステムで走っています。 (そして、suアクセスはできません。)私は、pipからのアドバイスに従うことによって、この同じ状況に陥りました。 

Pipバージョン8.1.1を使用していますが、18.0が使用可能です。あなたは 'pip install --upgrade pip'コマンドによるアップグレードを検討するべきです。

私には十分な管理者権限がないため、他の修正はどれも私にとってはうまくいきませんでした。しかし、これを読むことから私にはいくつかのことがつきました。

  • 私はこれをしてはいけませんでした。確かに、pipは私に言った。うそをついた。
  • --userを使用すると、ユーザー専用ディレクトリに集中することで多くの問題が解決されます。

それで、私はこのコマンドラインが私がいた場所に私を戻すために働くのを見つけました。 8.1.1とは異なるバージョンを使用している場合は、明らかにその部分を変更したいと思うでしょう。

python -m pip install --force-reinstall pip==8.1.1 --user

それが私のために働いた唯一のものですが、それは完全にうまくいきました!

7

この問題を解決するには、pipを再インストールします。

次のコードを使用してpipを再インストールしてください

Python2の場合:

python -m pip uninstall pip && Sudo apt install python-pip --reinstall

Python2の場合:

 python3 -m pip uninstall pip && Sudo apt install python3-pip --reinstall
5
Codemaker

上記のコマンドは私にはうまくいきませんでしたが、非常に役に立ちました。

Sudo apt purge python3-pip
Sudo rm -rf '/usr/lib/python3/dist-packages/pip'  
Sudo apt install python3-pip
cd
cd .local/lib/python3/site-packages
Sudo rm -rf pip*  
cd
cd .local/lib/python3.5/site-packages
Sudo rm -rf pip*  
Sudo pip3 install jupyter
3
Pierrot

私は私のUbuntu 16.04システムで同じ問題に出会いました。私は次のコマンドでpipを再インストールすることによってそれを修正することができました:

curl https://bootstrap.pypa.io/get-pip.py | Sudo python3

2
jkjung13

私はSudo apt remove python3-pipを使います、そしてpipは働きます。 

 ~ Sudo pip install pip --upgrade
[Sudo] password for sen: 
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    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 <command> [options]
2
jim gabriel

同じことがPixelbookで新しいLXC(strech)を使っても起こりました。この解決策は、受け入れられているものと非常によく似ていますが、微妙な違いが1つありますが、私にとっては固定pip3です。

Sudo python3 -m pip install --upgrade pip

それはバージョンをぶつけた、そして今それは予想通りに働く。

ここで見つけました... Python.org: pipが最新であることを確認してください

2
fliptopbox

python3 -m pip install --user pip==9.0.1(または動作したバージョン)で回復する

2
Claire

pip3を使用してエラーを修正するために私にとってうまくいったのは、次のとおりです。

Sudo cp -v /usr/local/bin/pip3 /usr/bin/pip3

すべてうまくいく:

 [email protected]:~$ pip -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

 [email protected]:~$ pip2 -V
 pip 10.0.1 from /home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)

 [email protected]:~$ pip3 -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

たぶん、新しいバージョン10.0.1のpipは/ usr/binの中のバイナリーを更新しませんか?

1
cryptoboy

Pythonバージョン2.7では、@ - Antonyソリューションは python3 python に変更することで完璧に動作します。

Sudo python -m pip uninstall pip && Sudo apt install python-pip --reinstall
1
ewalel

トリックと作品も

Sudo -H pip install lxml

1
Tejas Tank

私はこれと同じエラーがありました、しかしpython -m pipはまだ働いていたので、私は核のオプションSudo python -m pip install --upgrade pipでそれを修正しました。それは私のためにやりました。

0
Sergiu

このエラーは許可のものかもしれません。そのため、 -H flagを付けてコマンドを実行してテストします。

Sudo -H pip3 install numpy
0
Mohsen Abasi

@cryptoboyが言ったように - あなたがインストールしたpip/pythonのバージョンを確認してください

 [email protected]:~$ pip -V
 [email protected]:~$ pip2 -V
 [email protected]:~$ pip3 -V

次に、.local/lib /フォルダーに不要なライブラリがないか確認します。

新しいKubuntuに移行していて、ホームディレクトリに.local/lib/python2.7 /フォルダがあるときに設定のバックアップを取りました。 Python 3.6をインストールしました。古いフォルダを削除したところ、すべてうまくいきました。

0
Vergil333

仲間!私は同じ問題を抱えており、それを解決しました。これが私の解決策です。まず、pip install somethingを実行すると、次のようなエラーが発生しました。

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

そのため、ファイル/ usr/bin /とcat pip3にcdして、その中のコードを確認します。私はそれを見ます:

#!/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 __== '__main__':
    sys.exit(main())

それから私はそれがインストールパスになかったと思います。だから私はこのように、python3-pipにcdします。

cd /.local/lib/python3.5/site-packages/pip

ps:あなたはあなたのコンピュータの正しい方向にcd [cd]する必要があります。それから私は違いを見るためにファイルをキャットします(あなたはコードを見るために他の操作を使うことができます):

cat __main__.py

そして私はこれを見ました:

from __future__ import absolute_import
import os
import sys
# If we are running from a wheel, add the wheel to sys.path
# This allows the usage python pip-*.whl/pip install pip-*.whl
if __package__ == '':
    # __file__ is pip-*.whl/pip/__main__.py
    # first dirname call strips of '/__main__.py', second strips off '/pip'
    # Resulting path is the name of the wheel itself
    # Add that to sys.path so we can import pip
    path = os.path.dirname(os.path.dirname(__file__))
    sys.path.insert(0, path)

from pip._internal import main as _main  # isort:skip # noqa

if __== '__main__':
    sys.exit(_main())

それで、あなたは違いを見ることができますか?ファイルを/ usr/bin/pip3内のファイルと同じものにする必要があることがわかります。

そこで、私は/.local/lib/python3.5/site-packages/pipのコードを/usr/bin/pip3のコードに置き換えるようにコピーして問題を解決しました。

ps:pip3またはpipは、この問題に違いはありません。私の解決策があなたの問題を解決したら私は幸せになるでしょう!

0
lin pan
python3.6 -m pip install scipy 

上記のコマンドで特定のディレクトリにインストールします。

0
vishal

Ubuntu 18.04.1 Bionic Beaverでは、適切な環境を得るためには、ログアウトしてログインし直す必要があります(再起動は不要です)。

$ Sudo apt install python-pip

$ pip --version
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip install --upgrade pip

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

$ exit
<login>

$ pip --version
pip 18.1 from /home/test/.local/lib/python2.7/site-packages/pip (python 2.7)
0
Jeff Hoye

pip._internalからmainをインポート

from pip._internal import main

からピップコードを編集します。

Sudo nano /usr/bin/pip3
0
Akhilesh N S

それが価値があるものとして、私はpippip2pip3ではなく)に問題がありました:

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

$ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip3 -V
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

どういうわけか(どのように記憶していないのか)pythonのものを~/.localディレクトリにインストールしました。そこからpipディレクトリを削除すると、pipが再び機能し始めました。

$ rm -rf /home/precor/.local/lib/python2.7/site-packages/pip
$ pip -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
0
Michael Burr

Debianでは、最初にaptを更新する必要があります。

Sudo apt-get update -qq
Sudo apt-get install python-pip -qq
Sudo pip install pip --upgrade --quiet
Sudo pip2 install virtualenv --quiet

'Sudo apt-get update -qq'をスキップすると、pipが破損して 'cannot find main'エラーが表示されます。

0
Paul Kenjora