
【非開発者向け】pipについての話【中級者&不具合対応】
はじめに
pipとはPython言語デフォルトのパッケージ管理ツールです。AIをローカルPCで利用する場合は、開発者でなくても、インストール時や保守に必ず利用しなければならないコマンドの一つです。
どんなにGUIのインストール補助ツールを利用していたとしても、不具合やバグという罠からは逃れらず、「あれ、起動しなくなった」という時に渋々エラーメッセージを読んで対応していると思います。
本記事では、(Python言語の開発者ではなく)AI利用ユーザーがソフトウェアを管理する際の、pipコマンドの使い方を詳しく解説していきたいと思います。
※【中級者】とした理由は、問題が発生した時にpipパッケージの依存関係をまじめに解決するよりも、仮想環境をゼロから作り直した方が圧倒的に早いからです。より茨の道を歩むという意味の中級・上級です。
基本
パッケージ管理の概念とは?
最近は、コマンドラインのパッケージ管理がWindowsでも利用できるようになり(winget)、パッケージ管理の概念自体は身近になっているのではないかと思います。たとえば、WindowsでFirefoxをインストールしたいときには、Windowsプロンプトを管理者権限で起動して、
winget install Mozilla.Firefox
アンインストールしたい時は
winget uninstall Mozilla.Firefox
で完了します。パッケージ管理コマンドを利用すると、わざわざインストーラをダウンロードでしてダブルクリック→ウイザード等が必要無くなります。
インストールされているアプリケーションを一度にアップグレードするには、
winget upgrade --all
で事足りるようになりました。便利になったものです。(そもそもWindows以外のOSでは基本機能ではあったのですが…)
pipも同じパッケージ管理ソフトウェアの一つで、Python言語のアプリケーションやライブラリを管理する事ができます。
pip基本コマンド
パッケージをインストールする時は
pip install パッケージ名
インストール済みパッケージの一覧表示
pip list
パッケージのアップデート
pip install --upgrade パッケージ名
パッケージのアンインストール
pip uninstall パッケージ名
特定のバージョンを指定してインストール
# 例: pip install pandas==1.3.5
pip install パッケージ名==バージョン番号
ファイルに記載された複数パッケージの一括インストール
# requirements.txt はファイル名
pip install -r requirements.txt
依存関係を解決していく例(IOpaintの実例)
IOpaintとは、無料オープンソースのAIインペインティング&アウトペインティング・ツールです。特に画像のゴミの除去に優れています。pipコマンドのみで導入できます。(pip install iopaint)
※ 筆者の記事では一貫してAnacondaの仮想環境を利用しているので、インストールする際は、「conda create -n io-paint python=3.10」「conda activate io-poaint」等を先に実行してください。
※※ 最近アップデートがあったので、問題が出るだろうと思ったのですが、こういう不具合修正記事を書こうとしている時に限って問題がでないんですよね…※※
ですので、少し趣旨を変えて、壊れるまで各モジュールのバージョンを最新に上げていきます。
手動でアップデート
Anacondaを利用している場合はcondaの仮想環境に入ります。
※ Anaconda Promptで作業します。
conda activate io-paint
まずは、本体を最新版にアップデートした後、競合が発生していないかのチェックをします。
pip install --upgrade iopaint
>pip check
No broken requirements found.
問題ないそうです。。
次に、利用する依存モジュールにアップデート可能なものがあるかどうかを確認します。
pip list --outdate
Package Version Latest Type
---------------------- ------------ --------- -----
accelerate 1.1.0 1.1.1 wheel
aiofiles 23.2.1 24.1.0 wheel
aiohttp 3.9.5 3.11.8 wheel
altair 5.4.1 5.5.0 wheel
antlr4-python3-runtime 4.9.3 4.13.2 wheel
async-timeout 4.0.3 5.0.1 wheel
asyncer 0.0.7 0.0.8 wheel
contourpy 1.3.0 1.3.1 wheel
controlnet-aux 0.0.3 0.0.9 wheel
diffusers 0.27.2 0.31.0 wheel
fastapi 0.108.0 0.115.5 wheel
filelock 3.13.1 3.16.1 wheel
fonttools 4.54.1 4.55.0 wheel
frozenlist 1.4.1 1.5.0 wheel
fsspec 2024.2.0 2024.10.0 wheel
gradio 4.21.0 5.7.1 wheel
gradio_client 0.12.0 1.5.0 wheel
grpcio 1.64.0 1.68.0 wheel
httpcore 1.0.6 1.0.7 wheel
httpx 0.27.2 0.28.0 wheel
huggingface-hub 0.25.2 0.26.3 wheel
ここで表示されるのは、依存関係を考慮しない各パッケージ単体の最新版なので、実際にiopaintで利用できるかどうかはわかりません。
iopaintが必要とする各パッケージのバージョンを確認するには、「pipdeptree」を利用します。
>pip install pipdeptree
>pipdeptree -p iopaint
IOPaint==1.5.4
├── accelerate [required: Any, installed: 1.1.0]
│ ├── huggingface-hub [required: >=0.21.0, installed: 0.25.2]
│ │ ├── filelock [required: Any, installed: 3.13.1]
│ │ ├── fsspec [required: >=2023.5.0, installed: 2024.2.0]
│ │ ├── packaging [required: >=20.9, installed: 24.1]
│ │ ├── PyYAML [required: >=5.1, installed: 6.0.2]
│ │ ├── requests [required: Any, installed: 2.32.3]
│ │ │ ├── certifi [required: >=2017.4.17, installed: 2024.8.30]
│ │ │ ├── charset-normalizer [required: >=2,<4, installed: 3.4.0]
│ │ │ ├── idna [required: >=2.5,<4, installed: 3.10]
│ │ │ └── urllib3 [required: >=1.21.1,<3, installed: 2.2.3]
│ │ ├── tqdm [required: >=4.42.1, installed: 4.66.6]
│ │ │ └── colorama [required: Any, installed: 0.4.6]
│ │ └── typing_extensions [required: >=3.7.4.3, installed: 4.12.2]
たとえば、accelerateパッケージはAnyとなっているので上げられそうです。※ただし、treeその他の依存関係で失敗する可能性はあります。
>pip install --upgrade accelerate
Using cached accelerate-1.1.1-py3-none-any.whl (333 kB)
Installing collected packages: accelerate
Attempting uninstall: accelerate
Found existing installation: accelerate 1.1.0
Uninstalling accelerate-1.1.0:
Successfully uninstalled accelerate-1.1.0
Successfully installed accelerate-1.1.1
>pip check
No broken requirements found.
問題なくバージョンアップに成功しました。
次にaiofilesのアップデートに挑戦します。
>pip install -U aiofiles
Installing collected packages: aiofiles
Attempting uninstall: aiofiles
Found existing installation: aiofiles 23.2.1
Uninstalling aiofiles-23.2.1:
Successfully uninstalled aiofiles-23.2.1
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.
gradio 4.21.0 requires aiofiles<24.0,>=22.0, but you have aiofiles 24.1.0 which is incompatible.
Successfully installed aiofiles-24.1.0
やっとエラーがでました。aiofilesは最新になりましたが、gradioのバージョンが低いという事です。
ただし、gradio==4.21.0は固定ですので変えられません。aiofilesのバージョンをaiofiles<24.0,>=22.0の範囲で最新に変える必要があります。
利用可能なaiofilesのバージョン一覧を取得するには、以前であれば、
pip install aiofiles==
でエラー表示として表示するのが標準だったのですが、さすがPython文化です。お構いなしに仕様を変えてきました。取得できなくなりました。
まだ実験機能という事ですが、下記コマンドで取得できます。
>pip index versions aiofiles
aiofiles (24.1.0)
Available versions: 24.1.0, 23.2.1, 23.1.0, 22.1.0, 0.8.0, 0.7.0, 0.6.0, 0.5.0, 0.4.0, 0.3.2, 0.3.1, 0.3.0, 0.2.1
INSTALLED: 24.1.0
LATEST: 24.1.0
つまり、23.2.1が条件の下で最新という事になります。
>pip install aiofiles==23.2.1
Installing collected packages: aiofiles
Attempting uninstall: aiofiles
Found existing installation: aiofiles 24.1.0
Uninstalling aiofiles-24.1.0:
Successfully uninstalled aiofiles-24.1.0
Successfully installed aiofiles-23.2.1
>pip check
No broken requirements found.
他にもアップデート可能なモジュールはあると思いますが、問題が発生した時の依存関係を手動で修正する一般的な方法です。
pip checkで確認し、依存が壊れていれば修正します。ただし、依存が壊れていても問題なく動く事も多いです。
自動でアップデート
ここから先は
この記事が気に入ったらチップで応援してみませんか?