web-dev-qa-db-ja.com

bashからzshに変更した後のPIPエラー

そのため、最近、bashシェルからzshに変更しました。ただし、python、具体的にはpipを使用するときに問題が発生します。やってみると

pip list
ModuleNotFoundError: No module named 'pip._internal.main'

やっているwhich pipがくれます/home/marvin/.local/bin/pip、つまりbashrcに表示された行に従って、これをzshrcに追加しました

# adding packages installed via pip
export PATH="/home/marvin/.local/bin:$PATH"

また、試すためにシェルとマシンを再起動しました。それでも、pipを使用して仮想環境を操作することはできません。誰かがこれの解決策を教えてくれませんか?

[編集]

だから私はやった

python3 -m pip install --user --upgrade pip

そしてそれをグローバルに機能させました。残念ながら、私は仮想環境を再作成する必要がありました。しかし、しゃっくりは、シェル間の切り替えは環境の再作成を意味します。これを行うためのより良い方法があるはずです

1
MarvinKweyu

このエラーメッセージを確認しましたが、これは$PATHに関連する問題でした。

トラブルシューティングの手順は次のとおりです。

echo $PATHを使用してパスを表示できます。

which pipwhich pythonは同じ場所を返す必要があります。これらのコマンドは、$PATHのディレクトリを検索して、実行可能ファイルが含まれる最初の場所を見つけます。

pyenvを使用している場合、which pipwhich pythonは同じ「shims」ディレクトリを返しますが、実行可能ファイルが同じディレクトリから実行されているとは限りません。その場合は、pyenv which pipおよびpyenv which pythonを使用します。

私の場合、$ PATHには~/.local/bin/ディレクトリがあり、tmux内で実行したときに先頭に追加されていました。 ~/.local/bin/にはpip実行可能ファイルがありましたが、python実行可能ファイルはありませんでした。したがって、私はpyenvバージョンのPythonを使用しようとしましたが、~/.local/bin/pipバージョンのpipです。

明確にするために編集:

which pipwhich pythonが異なるパスを表示する場合、またはpyenvの場合、pyenv which pippyenv which pythonが異なるパスを表示する場合、それが問題である可能性があります。

ソリューションは環境に依存するため、1つのソリューションですべてに対応することは困難です。

多分あなたの$PATHには~/.local/binbefore/usr/binがあり、~/.local/binにはpip実行可能ファイルがありますが、pythonはありません実行可能。したがって、お使いのコンピュータは~/.local/binpipを検出していますが、/usr/binpythonを検出しています。その場合、不要な場合は~/.local/binpipを削除できます。または、/usr/binのpipへのシンボリックリンクになるように更新することもできます(そこに別のpip実行可能ファイルがあると仮定します)。または、~/.local/bin/pythonのシンボリックリンクを/usr/bin/pythonに追加することもできます。または、$PATHを検索して/usr/binbefore~/.local/binを検索するように更新することもできます。

ソリューションは、環境、Pythonのインストール方法、使用するバージョンなどによって異なります。

1
Eric Ihli

この奇妙さは、PATHとpython/pipのバージョンの違いによって引き起こされる可能性があります。

これらのコマンドの出力をbashとzshの両方で確認することをお勧めします。

pip --version
python -m pip --version
pip2 --version
python2 -m pip --version
pip3 --version
python3 -m pip --version

@ Kusalananda が示唆するように、.bashrcなどの初期化ファイルも確認する必要があります。それは依存します... zsh/bash環境でsetの出力を比較する方が簡単な場合があります。その差分はおそらく巨大(1k行以上)なので、干し草の山から針を探すようなものです。欠落または変更された変数(PATHのように)およびPYTHONNOUSERSITE、PYTHONPATH、およびPIPで始まるもの、またはPIP(またはPY?)シェル関数(pip(){...}として)を含むものはカウントされる場合があります。

0
n3ko