pip installでインストールできない場合の対処法6選

こんにちは、デジタルボーイです。備忘録がてら、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でインストールする際には、「正式なパッケージ名」を指定する必要があります。

一般的な名称正式なパッケージ名説明
cv2opencv-pythonOpenCVライブラリ。画像処理や機械学習に使用。
bs4beautifulsoup4HTMLやXMLのパーシングに使用。
PILpillowPython Imaging Library。画像処理に使用。
sklearnscikit-learn機械学習ライブラリ。
pltmatplotlibグラフ描画ライブラリ。
psycopg2psycopg2-binaryPostgreSQLデータベースアダプター。
jwtPyJWTJSON 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つのケースで概ね、対処できると思いますので、ぜひ、やって見てください!

目次