内容
はじめまして。私は普段メーカーで機械学習の業務に携わっております。
仕事中、他の同僚とPythonの開発環境を揃える必要があるときは少なからずあります。
とはいえガチガチのエンジニアというわけでもない(いわゆる手を動かす研究開発も並行して行っています)ような企業研究者だと、Dockerのようなコンテナ型の仮想環境を使って……という手段も取りにくかったりします。
例えば、相手がDockerを知らない、それどころかPythonを触ったばかり、利用コストが申請しづらい(これが一番多い)等々。
そういうときに活躍するのが皆様ご存知のrequirements.txtですが、pip freeze
で作って中身を見てみると、まあごちゃっとしていて、仮想環境に入れたパッケージが全部含まれている。.pyファイルや.ipynbファイルの必要最小限なパッケージを把握したいだけなのに。
こういうときに、スリムなrequirements.txtを出力できるpipreqsとpipreqsnbが役に立ちます。前置きが長くなりすぎました。
実行環境および前提条件
・Windows11
・Python3
・上記のように開発環境を揃える際にDockerを使うのが難しい人
・.pyだけでなく.ipynbもよく使う
使用ライブラリ
・pipreqs
・pipreqsnb
使用方法
インストール
Winキーのあとcmdと入力してコマンドプロンプトを呼び出し、下記の通りコマンドを実行する
pip install pipreqs
pip install pipreqsnb
書き出し
あらかじめcd {プロジェクトが保存されたディレクトリパス}
で移動してから実行
pipreqs
もしくは下記のように実行すると移動しなくてもOK
pipreqs {プロジェクトが保存されたディレクトリパス}
いずれも選択したディレクトリ下にrequirements.txtが作られる。
pipreqsは.pyファイルのみが対象のため、.ipynbファイルのときはpipreqsnbを使う。
(pipreqsnbのリファレンスだと.pyもできそうだったが、試したら上手くできなかった)
(対象が.ipynbの場合)
pipreqsnb {プロジェクトが保存されたディレクトリパス}
オプション
pipreqsnbはpipreqsのラッパーなので、ほぼ同じオプションが使える。
共通で使えるものを下記に示す。
Option | |
---|---|
--use-local | PyPIを使わずローカルパッケージ情報のみを使用する |
--pypi-server {url} | カスタムPyPIサーバーを使用する |
--proxy {url} | プロキシを使用する |
--debug | デバッグ情報を出力する |
--ignore {dirs}... | カンマで区切られた余分なディレクトリを無視する |
--encoding {charset} | ファイルを開くときのエンコーディングを指定する |
--savepath {file} | 指定されたファイルに要件リストを保存する |
標準出力に要件のリストを出力する | |
--force | 保存先にrequirements.txtがあっても上書きする |
--diff {file} | requirements.txt内のパッケージとプロジェクトのインポートを比較する |
--clean {file} | requirements.txtからプロジェクトにインポートされていないパッケージを削除する |
ちなみに、エンコーディングを指定していないとUnicodeDecodeError
を吐くことが非常に多いので、下記のように使うことが多い(むしろ私の環境だと今のところ100%そう)。
pipreqsnb --encoding UTF8 {プロジェクトが保存されたディレクトリパス}
終わりに
.ipynbはpipreqsで捕捉できない!と嘆いていたところにpipreqsnbを見つけたので記事を書いてみました。
また、記事を書く際は公式リファレンス以外に下記リンクを参考にさせていただきました。
ありがとうございます。
・最小限なrequirements.txtの作成方法
・pipreqsがUnicodeDecodeErrorになるときの対処法