【Python】仮想環境のライブラリ更新に失敗した時の対応
venvで作成した仮想環境のmatplotlibを更新しようとしたところ、ウイルスバスターなるものにpip.pyがランサムウェアの疑いをかけられて正常に更新できないという状況がたびたび起こりました。
改めてmatplotlibをインストールすれば問題ないのですが、更新処理が中途半端に終わったために中間フォルダのようなものが残ったままになり、Warningが出力されるため、その解消方法を記載します。
pipでmatplotlibを更新しようとしてエラー発生
pip install <package-name> -U
で更新を実施
1(venv310) D:\work>pip install matplotlib -U
2Requirement already satisfied: matplotlib in d:\work\venv310\lib\site-packages (3.7.2)
3Collecting matplotlib
4 Downloading matplotlib-3.8.2-cp310-cp310-win_amd64.whl.metadata (5.9 kB)
5Requirement already satisfied: contourpy>=1.0.1 in d:\work\venv310\lib\site-packages (from matplotlib) (1.1.0)
6Requirement already satisfied: cycler>=0.10 in d:\work\venv310\lib\site-packages (from matplotlib) (0.11.0)
7Requirement already satisfied: fonttools>=4.22.0 in d:\work\venv310\lib\site-packages (from matplotlib) (4.42.1)
8Requirement already satisfied: kiwisolver>=1.3.1 in d:\work\venv310\lib\site-packages (from matplotlib) (1.4.5)
9Requirement already satisfied: numpy<2,>=1.21 in d:\work\venv310\lib\site-packages (from matplotlib) (1.25.2)
10Requirement already satisfied: packaging>=20.0 in d:\work\venv310\lib\site-packages (from matplotlib) (23.1)
11Requirement already satisfied: pillow>=8 in d:\work\venv310\lib\site-packages (from matplotlib) (10.0.0)
12Requirement already satisfied: pyparsing>=2.3.1 in d:\work\venv310\lib\site-packages (from matplotlib) (3.0.9)
13Requirement already satisfied: python-dateutil>=2.7 in d:\work\venv310\lib\site-packages (from matplotlib) (2.8.2)
14Requirement already satisfied: six>=1.5 in d:\work\venv310\lib\site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)
15Downloading matplotlib-3.8.2-cp310-cp310-win_amd64.whl (7.6 MB)
16 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.6/7.6 MB 34.9 MB/s eta 0:00:00
17Installing collected packages: matplotlib
18 Attempting uninstall: matplotlib
19 Found existing installation: matplotlib 3.7.2
20 Uninstalling matplotlib-3.7.2:
古いバージョンのmatplotlibのアンインストールが終わったところで、ウイルスバスターがpip.pyをランサムウェア判定し、更新処理が中途半端に終了しました。
matplotlibがアンインストールされたことの確認
pip listからmatplotlibがアンインストールされたことは確認できます。
1(venv310) D:\work>pip list | find "matplotlib"
2WARNING: Ignoring invalid distribution -atplotlib (d:\work\venv310\lib\site-packages)
3japanize-matplotlib 1.1.3
4matplotlib-inline 0.1.6
matplotlibが見当たらないのでアンインストールされています。
matplotlibをインストールしようとするも失敗
matplotlibがないことが確認できたので、新規にmatplotlibのインストールを試みますが失敗します。
1(venv310) D:\work>pip install matplotlib
2WARNING: Ignoring invalid distribution -atplotlib (d:\work\venv310\lib\site-packages)
3Collecting matplotlib
4 Using cached matplotlib-3.8.2-cp310-cp310-win_amd64.whl.metadata (5.9 kB)
5Requirement already satisfied: contourpy>=1.0.1 in d:\work\venv310\lib\site-packages (from matplotlib) (1.1.0)
6Requirement already satisfied: cycler>=0.10 in d:\work\venv310\lib\site-packages (from matplotlib) (0.11.0)
7Requirement already satisfied: fonttools>=4.22.0 in d:\work\venv310\lib\site-packages (from matplotlib) (4.42.1)
8Requirement already satisfied: kiwisolver>=1.3.1 in d:\work\venv310\lib\site-packages (from matplotlib) (1.4.5)
9Requirement already satisfied: numpy<2,>=1.21 in d:\work\venv310\lib\site-packages (from matplotlib) (1.25.2)
10Requirement already satisfied: packaging>=20.0 in d:\work\venv310\lib\site-packages (from matplotlib) (23.1)
11Requirement already satisfied: pillow>=8 in d:\work\venv310\lib\site-packages (from matplotlib) (10.0.0)
12Requirement already satisfied: pyparsing>=2.3.1 in d:\work\venv310\lib\site-packages (from matplotlib) (3.0.9)
13Requirement already satisfied: python-dateutil>=2.7 in d:\work\venv310\lib\site-packages (from matplotlib) (2.8.2)
14Requirement already satisfied: six>=1.5 in d:\work\venv310\lib\site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)
15Using cached matplotlib-3.8.2-cp310-cp310-win_amd64.whl (7.6 MB)
16WARNING: Ignoring invalid distribution -atplotlib (d:\work\venv310\lib\site-packages)
17Installing collected packages: matplotlib
18ERROR: Could not install packages due to an OSError: [WinError 5] アクセスが拒否されました。: 'D:\\work\\venv310\\Lib\\site-packages\\matplotlib\\ft2font.cp310-win_amd64.pyd'
19Check the permissions.
matplotlibフォルダへのアクセスが拒否されたため、matplotlibをインストールできませんでした。
古いmatplotlibフォルダを削除後に再インストール
と言うわけで、既存のmatplotlibフォルダを削除してからインストールを実施します。
matplotlibフォルダの削除方法はエクスプローラーなどのGUIからでも、コマンドプロンプトのようなCUIからでもOKです。
フォルダ削除後にインストールすると、インストールは成功します。
1(venv310) D:\work>pip install matplotlib
2WARNING: Ignoring invalid distribution -atplotlib (d:\work\venv310\lib\site-packages)
3Collecting matplotlib
4 Using cached matplotlib-3.8.2-cp310-cp310-win_amd64.whl.metadata (5.9 kB)
5Requirement already satisfied: contourpy>=1.0.1 in d:\work\venv310\lib\site-packages (from matplotlib) (1.1.0)
6Requirement already satisfied: cycler>=0.10 in d:\work\venv310\lib\site-packages (from matplotlib) (0.11.0)
7Requirement already satisfied: fonttools>=4.22.0 in d:\work\venv310\lib\site-packages (from matplotlib) (4.42.1)
8Requirement already satisfied: kiwisolver>=1.3.1 in d:\work\venv310\lib\site-packages (from matplotlib) (1.4.5)
9Requirement already satisfied: numpy<2,>=1.21 in d:\work\venv310\lib\site-packages (from matplotlib) (1.25.2)
10Requirement already satisfied: packaging>=20.0 in d:\work\venv310\lib\site-packages (from matplotlib) (23.1)
11Requirement already satisfied: pillow>=8 in d:\work\venv310\lib\site-packages (from matplotlib) (10.0.0)
12Requirement already satisfied: pyparsing>=2.3.1 in d:\work\venv310\lib\site-packages (from matplotlib) (3.0.9)
13Requirement already satisfied: python-dateutil>=2.7 in d:\work\venv310\lib\site-packages (from matplotlib) (2.8.2)
14Requirement already satisfied: six>=1.5 in d:\work\venv310\lib\site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)
15Using cached matplotlib-3.8.2-cp310-cp310-win_amd64.whl (7.6 MB)
16WARNING: Ignoring invalid distribution -atplotlib (d:\work\venv310\lib\site-packages)
17Installing collected packages: matplotlib
18Successfully installed matplotlib-3.8.2
Successfully installed matplotlib-3.8.2
と出力されているのでmatplotlibのインストールは正常に終了しています。
しかし、すぐ上にWARNING: Ignoring invalid distribution -atplotlib (d:\work\venv310\lib\site-packages)
とワーニングが出力されています。
Warningを解消する
Warning内容
WARNING: Ignoring invalid distribution -atplotlib (d:\work\venv310\lib\site-packages)
のワーニングは、-atplotlibという名前の無効なパッケージまたはディストリビューションが存在することが原因と考えられます。
また、このワーニングが発生した経緯としては、matplotlibの不完全なアンインストールで残ってしまった可能性が考えられます。
解決方法として、d:\work\venv310\lib\site-packages
配下の-atplotlib
という名前のフォルダを削除します。
Warningの原因フォルダを削除する
今回は実際には以下の3種類のフォルダを削除しました。
- ~matplotlib
- ~atplotlib-3.7.2.dist-info
- ~atplotlib.libs
ワーニングのメッセージでは「-」が先頭に付いていましたが、実際は「~」でした。
削除前のatplotlib関連フォルダ
1(venv310) D:\work\venv310\Lib\site-packages>dir | find "atplotlib"
22023/09/18 (月) 17:01 <DIR> japanize_matplotlib
32023/09/18 (月) 17:01 <DIR> japanize_matplotlib-1.1.3.dist-info
42023/12/26 (火) 01:30 <DIR> matplotlib
52023/12/26 (火) 01:30 <DIR> matplotlib-3.8.2.dist-info
62023/12/26 (火) 01:30 <DIR> matplotlib.libs
72023/09/08 (金) 21:47 <DIR> matplotlib_inline
82023/09/08 (金) 21:47 <DIR> matplotlib_inline-0.1.6.dist-info
92023/09/08 (金) 21:47 <DIR> ~atplotlib
102023/09/08 (金) 21:47 <DIR> ~atplotlib-3.7.2.dist-info
112023/09/08 (金) 21:47 <DIR> ~atplotlib.libs
削除後のatplotlib関連フォルダ
1(venv310) D:\work\venv310\Lib\site-packages>dir | find "atplotlib"
22023/09/18 (月) 17:01 <DIR> japanize_matplotlib
32023/09/18 (月) 17:01 <DIR> japanize_matplotlib-1.1.3.dist-info
42023/12/26 (火) 01:30 <DIR> matplotlib
52023/12/26 (火) 01:30 <DIR> matplotlib-3.8.2.dist-info
62023/12/26 (火) 01:30 <DIR> matplotlib.libs
72023/09/08 (金) 21:47 <DIR> matplotlib_inline
82023/09/08 (金) 21:47 <DIR> matplotlib_inline-0.1.6.dist-info
削除したフォルダはハイフンではなくチルダから始まっているため、atplotlibで検索しないと引っかからないことに注意が必要でした。
pip checkで確認
最後にpip checkで依存性などに異常がないか確認しておきます。
1(venv310) D:\work\venv310\Lib\site-packages>pip check
2No broken requirements found.
Warningが出力されなくなりました。
このようなフォルダ削除による対処は、間違ったフォルダを削除してしまうと、それこそ依存性などに問題が発生して、最初から環境を作り直す羽目になったりします。
なので、(初めての)フォルダ削除は割と勇気がいる気がします。
(ウイルスバスター許すまじ!WindowsPCのセキュリティ対策は、やはりWindows Defender!)
まとめ
1# アクセスが拒否されてpip installできないエラーの解消
2ERROR: Could not install packages due to an OSError: [WinError 5] アクセスが拒否されました。: 'D:\\work\\venv310\\Lib\\site-packages\\matplotlib\\ft2font.cp310-win_amd64.pyd'
3Check the permissions.
4# パッケージのフォルダ(今回はmatplotlib)を削除後に、再度pip installする
5
6# 古い中間フォルダが残っていることによるワーニングの解消
7WARNING: Ignoring invalid distribution -atplotlib (d:\work\venv310\lib\site-packages)
8# 文言で検索して見つかったフォルダを全て削除する
9# 今回の場合は"atplotlib"で検索