記事の経緯
スクレイピングのクローラーを作ろうと思った時にseleniumと合わせてrequestsなるパッケージが必要ということでインストールした際に出くわしたエラーについてのエラー解決方法についてまとめてみました。
流れ
インストールした時に出てきた表示
Installing collected packages: urllib3
Attempting uninstall: urllib3
Found existing installation: urllib3 1.26.8
Uninstalling urllib3-1.26.8:
Successfully uninstalled urllib3-1.26.8
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
selenium 4.1.0 requires urllib3[secure]~=1.26, but you have urllib3 1.25.11 which is incompatible.
1. まずはググろう!
正直、何言ってるかわかんないですよね、そういう時は素直にDeepLを使って意味を理解しましょう。
調べてわかったことは
なるほど、既に存在しているパッケージと関連性があるライブラリだけどバージョンの依存関係がマッチしてないですよ、ということですね。
seleniumがurllib3に対して要求しているバージョンは1.26なのに、私のPCにインストールされているのは1.25.11と違いますということです。
ここから次にやることは、
- Googleでエラー文を調べて対処法を調べる。
- 自分がインストールしているライブラリ(今回でいうurllib3というパッケージ)のバージョンがなんなのか改めて調べる
ことです。
まずはインストールされているパッケージの一覧をどう見るのか。
2.インストールしているパッケージをまず確認しよう
(参考記事) https://www.yokoyan.net/entry/2018/06/13/181500
この記事を参考にして、なるほど
$ pip list
でインストールされているパッケージが確認できるのね。ということがわかります。
改めて、1.25.11ということが確認できました。
3.インストール済みのパッケージの依存関係を調べよう
インストールしているパッケージの依存関係で問題があるものが調べられます。
$ pip check
// selenium 4.1.0 has requirement urllib3[secure]~=1.26, but you have urllib3 1.25.11.
ここからもまだパッケージの同士の関係性において問題があることがわかります。
これを解決していきましょう
4.特定パッケージのバージョンを更新しよう
次にurllib3のパッケージをアップデードします。
パッケージのアップデートの方法を調べると
$ pip install -U urllib3
アップデートした結果がこちら
Requirement already satisfied: urllib3 in ./○○○/○○○○○○○○/lib/python3.7/site-packages (1.25.11)
Collecting urllib3
Using cached urllib3-1.26.8-py2.py3-none-any.whl (138 kB)
Installing collected packages: urllib3
Attempting uninstall: urllib3
Found existing installation: urllib3 1.25.11
Uninstalling urllib3-1.25.11:
Successfully uninstalled urllib3-1.25.11
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
requests 2.22.0 requires urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1, but you have urllib3 1.26.8 which is incompatible.
無事ダウンロードできたようです。
が、またもやエラーが!
先程のエラーはseleniumとurllib3がアンマッチでしたが、今度はrequestsとurllib3がアンマッチのようです。
5.requestsパッケージをアップデートしよう
次はrequestsの方をアップデートさせて解決してみます
$ pip install -U requests
アップロードを実行した結果、
Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB)
||
(中略)
||
Installing collected packages: charset-normalizer, requests
Attempting uninstall: requests
Found existing installation: requests 2.22.0
Uninstalling requests-2.22.0:
Successfully uninstalled requests-2.22.0
Successfully installed charset-normalizer-2.0.12 requests-2.27.1
問題なくrequestsパッケージもアップデートできたようです。
こちらも再度パッケージの依存関係のミスマッチがないかチェックしてみましょう。
$ pip check
このコマンドを実行して、先程のエラー(selenium 4.1.0 has requirement urllib3[secure]~=1.26, but you have urllib3 1.25.11.)出ないことが確認できればOK! パッケージのミスマッチは解消されたことがわかります。
これで問題なくpythonでクローリングしてデータ取得できるスタートラインに立てました。クローラーについては改めてまた別の機会でまとめたいと思います。