pythonのインストールパッケージの依存関係ミスマッチを解消しよう


# 記事の経緯

スクレイピングのクローラーを作ろうと思った時にseleniumと合わせてrequestsなるパッケージが必要ということでインストールした際に出くわしたエラーについてのエラー解決方法についてまとめてみました。

# 流れ

インストールした時に出てきた表示

```terminal:terminal 
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を使って意味を理解しましょう。
調べてわかったことは
![スクリーンショット 2022-03-04 13.56.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566867/615f9f5b-f3f9-8ae0-11cd-472f57389fcd.png)

なるほど、既に存在しているパッケージと関連性があるライブラリだけどバージョンの依存関係がマッチしてないですよ、ということですね。
seleniumがurllib3に対して要求しているバージョンは1.26なのに、私のPCにインストールされているのは1.25.11と違いますということです。

ここから次にやることは、
- Googleでエラー文を調べて対処法を調べる。
- 自分がインストールしているライブラリ(今回でいうurllib3というパッケージ)のバージョンがなんなのか改めて調べる
ことです。


まずはインストールされているパッケージの一覧をどう見るのか。

## 2.インストールしているパッケージをまず確認しよう

(参考記事)　https://www.yokoyan.net/entry/2018/06/13/181500

この記事を参考にして、なるほど

```terminal:terminal 
$ pip list
```
でインストールされているパッケージが確認できるのね。ということがわかります。

![スクリーンショット 2022-03-04 14.04.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566867/3b4b000b-4cd2-7d65-4a4d-89d441948b44.png)

改めて、1.25.11ということが確認できました。


## 3.インストール済みのパッケージの依存関係を調べよう

インストールしているパッケージの依存関係で問題があるものが調べられます。

```terminal:terminal 
$ pip check 

// selenium 4.1.0 has requirement urllib3[secure]~=1.26, but you have urllib3 1.25.11.
```

ここからもまだパッケージの同士の関係性において問題があることがわかります。
これを解決していきましょう

## 4.特定パッケージのバージョンを更新しよう

次にurllib3のパッケージをアップデードします。
パッケージのアップデートの方法を調べると

https://qiita.com/HyunwookPark/items/242a8ceea656416b6da8

```terminal:terminal 
$ pip install -U urllib3 
```

アップデートした結果がこちら
```terminal:terminal  
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の方をアップデートさせて解決してみます

```terminal:terminal 
$ pip install -U requests
```

アップロードを実行した結果、

```terminal:terminal 
  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パッケージもアップデートできたようです。
こちらも再度パッケージの依存関係のミスマッチがないかチェックしてみましょう。

```terminal:terminal 
$ pip check 
```

このコマンドを実行して、先程のエラー(selenium 4.1.0 has requirement urllib3[secure]~=1.26, but you have urllib3 1.25.11.)出ないことが確認できればOK! パッケージのミスマッチは解消されたことがわかります。

これで問題なくpythonでクローリングしてデータ取得できるスタートラインに立てました。クローラーについては改めてまた別の機会でまとめたいと思います。