こんにちは、デジタルボーイです。備忘録がてら、macとLinux上で、pip innstallでインストールできなかった場合のケースと対処法について、まとめておきます。
デジタルボーイです。
データサイエンス歴20年以上のおっさんです。中小企業診断士として、データサイエンス、WEBマーケティング、SEOに関するデータ分析、コンサルティングの仕事をしています。自己紹介の詳細はコチラ
お時間のない人のための、結論!!
エラーケースは多くの場合、次の6つが原因でしょう。それぞれの対処法については、本文を確認ください
- パッケージ名の誤り!
- pipのバージョンが古い!
- 依存関係が競合している!
- ユーザーの権限が不足している!
- pythonバージョンとの互換性がない!
- インターネット接続できていない!
環境設定
- OS: macOS
- Python: 3.10
ケース1: パッケージ名の誤り!
例えば、画像処理のための定番ツールである「cv2」パッケージを導入したい場合、次のケースではエラーとなります。
% pip install cv2
ERROR: Could not find a version that satisfies the requirement cv2 (from versions: none)
ERROR: No matching distribution found for cv2
理由は、一般的な名称であるcv2は、パッケージの正式名称ではないからです。
解決法:正式なパッケージ名を検索する
正式なパッケージ名を検索するには、Googleで検索でもいいですが、PyPIというpipでインストールするためのパッケージを管理する仕組みの公式サイトで検索するのが、正確ですね。PyPI公式サイト
ちなみに、一般的な名称と、正式なパッケージ名が異なるケースとして、思いつくものだけでも次のケースがあります。多分、まだまだあるんですが、おもいだせません。pipでインストールする際には、「正式なパッケージ名」を指定する必要があります。
一般的な名称 | 正式なパッケージ名 | 説明 |
---|---|---|
cv2 | opencv-python | OpenCVライブラリ。画像処理や機械学習に使用。 |
bs4 | beautifulsoup4 | HTMLやXMLのパーシングに使用。 |
PIL | pillow | Python Imaging Library。画像処理に使用。 |
sklearn | scikit-learn | 機械学習ライブラリ。 |
plt | matplotlib | グラフ描画ライブラリ。 |
psycopg2 | psycopg2-binary | PostgreSQLデータベースアダプター。 |
jwt | PyJWT | JSON Web Tokenの実装。 |
ケース2: pipのバージョンが古い!
これも結構あるんですが、pipのバージョンが古いとパッケージによってはエラーになるケースがあります。パッケージ自体が新しかったり何らかの修正を加えている場合、古いpipではインストールエラーになるためです。
このような場合、エラー内容は以下だったり、
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
以下だったりします。
There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
解決法:パッケージインストール前に必ず、pipを更新する!
pipは次のコマンドで更新(アップデート)できます。pip自体でpipの更新を行うんですね。
% pip install --upgrade pip
なので、パッケージをインストールする際は、「pipを更新すること!」を癖づけするといいでしょう。
ケース3: 依存関係が競合している!
パッケージはそれぞれが独立しているとはかぎらず、パッケージ間で依存関係があります。ちょっと難しいですが、わかりやすいようにpandasとnumpyを例に見ていきましょう。
pandasをインストールすると、自動的にnumpyがインストールされます。これは、pandasを動かすためにはnumpyが必要だからです。この場合、pandasはnumpyに依存して、両者に依存関係がある、と言えます。
このような場合、例えば、numpyの最新版をインストールしてた状態で、古いバージョンのpnadasをインストールすると、エラーが起きる可能性があります。このように、依存関係で対応するバージョンとことなるものをインストールしようとし、エラーとなる場合に、依存関係が競合している、と言います。
エラーメッセージの例としては、
ERROR: Cannot install package_A and package_B because these package versions have conflicting dependencies.
The conflict is caused by:
package_A 2.1.0 depends on package_C>=1.0.0,<2.0.0
package_B 3.0.0 depends on package_C>=2.0.0
To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict
や
ERROR: Could not find a version that satisfies the requirement package_D==1.2.0 (from package_E==3.0.0) (from versions: 2.0.0, 2.1.0, 2.2.0)
ERROR: No matching distribution found for package_D==1.2.0 (from package_E==3.0.0)
などがあります。エラーメッセージにversion
に関することや、1.0.0
のようなバージョン数値が出た場合は、このエラーを疑ってみるといいでしょう。
解決法:仮想環境を利用する!
本来は、依存関係を紐解きながら、一つ一つバージョンを合わせながらパッケージを更新する必要があります。ただ、パッケージを入れまくった場合、それをやりだすと、モグラ叩きのように、ラチがあかなくなる場合が多々あります。
なので、込み入ったパッケージを入れる際は、venvのような仮想環境を利用するのが手っ取り早いと思います!
仮想環境は、任意のディレクトリで、以下のコードを実行すると、起動します。
% python -m venv myenv
% source myenv/bin/activate
例えば、上記のコードで仮想環境を実行すると、下記のようにmyenvという環境でターミナルが実行されます。
(myenv) %
この状態は、まっさらなpythonが利用できる状態なので、ここから、特定のパッケージをインストールすることで、依存関係が競合せずに、パッケージを利用することができますね!
ケース4: ユーザーの権限が不足している!
あまり、mac自体ではこのようなケースはないでしょうが、dockerなどの仮想コンテナやlinuxなどでpipを使用した際、起こるケースがあります。
エラーメッセージは、
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/local/lib/python3.x/site-packages/some_package'
とか
PermissionError: [Errno 13] Permission denied: '/usr/local/bin/some_command'
などです。permission deniedときたら、このエラーを疑っていいでしょう。
解決法:とりあえず、sudoをつけてみる!
実行時のユーザー権限を、スーパーユーザー相当に格上げし実行するコマンドであるsudo
をpipの前につけることで解決することが多いです。
% sudo pip install xxxx
この場合、システムのログインパスワードを聞かれることがあるので、その時は入力しEnterを押してください。
ケース5: pythonバージョンとの互換性がない!
インストール済みのPythonのバージョンが古い場合、最新のパッケージがそのPythonに合わない場合があります。エラーメッセージはこんな感じです。
ERROR: Package 'some-package' requires a different Python: 3.7.x not in '>=3.8,<4.0'
pythonのバージョン情報が記載されていたら、このエラーを疑って見ましょう。
解決法:pythonかパッケージか、どっちかのバージョンを合わせる!
単純ですが、pythonのバージョンを上げるか、パッケージのバージョンを落とすかですね。
pythonのバージョンを上げには・・・
MacだったらHomevrewでインストールできます。
brew install python@3.9
その後のパスの設定などはこちらを参照ください。
linuxだったら、でインストールできます。
sudo apt install python3.8
パッケージのバージョンを指定するには・・・
こんな感じで、パッケージのバージョンを指定し、インストールも可能です。
pip install package_name==X.Y.Z
pipでのバージョン指定方法はこちらに詳しく書いてあるので、参考にしてください。
ケース6: インターネット接続できていない!
こんなこと書くと、「バカにすんな!」と読者のみなさんにぶっ飛ばされそうですが、恐る恐る解説します。新幹線などの移動中や、カフェなどでネットに繋いでない場合など、無きにしも非ずなので。。。
エラーメッセージはこんな感じです。
ERROR: Could not find a version that satisfies the requirement package_name (from versions: none)
ERROR: No matching distribution found for package_name
とか
HTTPError: 404 Client Error: Not Found for url: https://pypi.org/simple/package_name/
です。解決策はいうまでもないですね!省略します。
番外編:強制的に再インストールしたい場合
pip インストールで失敗して、対処してもうまくいかない場合、強制的にインストールすることも可能です。次のように既存パッケージを強制的に再インストールします。
% pip install --force-reinstall numpy
Collecting numpy
Using cached numpy-1.26.0-cp310-cp310-macosx_11_0_arm64.whl (14.0 MB)
Installing collected packages: numpy
Successfully installed numpy-1.26.0
まとめ
以上が、pip install時にパッケージがインストールできなかった場合のエラーケースと対策でした。今回の6つのケースで概ね、対処できると思いますので、ぜひ、やって見てください!