- 効率的にライブラリ管理をしたい
- 異なる環境でも素早くライブラリをインストールしたい
Python は他のプログラミング言語に比べて、多種多様なライブラリが存在します。
色々な用途に使えるメリットがある一方で、ライブラリの管理や、プロジェクトの共同作業者が素早く環境構築をするのに面倒な思いをされている方も多いと思います。
そこで便利なのが requirements.txt を使ったライブラリ管理方法です。
使い方は簡単。
- テキストファイルにライブラリ一覧を書く
- pip install -r requirements.txt を実行
- リストアップされたライブラリが全てインストールされる
この方法は、複数人プロジェクトのほか一人プロジェクトであってもメリットは大きいです。
まだ requirements.txt を使った運用をしたことのない方は、ぜひ本記事を参考に挑戦してみてください。
requirements.txt 関連のコマンド
requirements.txt の具体的な書き方の前に、よく使うコマンドをご紹介します。
手作業でライブラリ一覧を書くこともできるものの、コマンドを知っておくとスマートなライブラリ管理ができます。
ぜひマスターしてみてください。
一括インストールするコマンド
requirements.txt に記載されているライブラリを一括でインストールするには、以下のコマンドを実行します。
pip install -r requirements.txt
このコマンドを実行する前に、現在のディレクトリに requirements.txt が存在することを確認してください。
-r
は要件ファイル(requirements files)を指定するためのオプションで、一括インストールする際には必ず指定することになります。
現プロジェクトで使っているライブラリを requirements.txt に出力するコマンド
以下のコマンドを実行すると、現在の環境でインストールしたライブラリの一覧を requirements.txt として出力できます。
pip freeze > requirements.txt
すでにプロジェクトが進行していて、requirements.txt を作っていない場合に有効な方法です。
特定のライブラリだけをインストールする
specific-req.txt ファイルを作成して、この中にインストールしたいライブラリのみ記載して以下のコマンドを実行してください。
pip install -r specific-req.txt
ファイル名は specific-req.txt としましたが、やっていることは一括インストールの際の pip install -r requirements.txt と同じです。
requirements.txt の書き方
前述の通り pip freeze コマンドを実行すれば、requirements.txt は自分で書かずに生成可能です。
ここでは、より細かくライブラリ管理をしたい場合に知っておくと便利な requirements.txt の書き方をご紹介します。
コメントの書き方
Python と同様、コメントは#
を使います。
# コメントが記入できます。
つまり、#
以降の文字列は無視されることになります。
バージョンを指定しないでライブラリを指定
難しいことは考えずに requirements.txt を運用してみたい場合には、バージョン指定せずにライブラリ名を書いていく方法があります。
# バージョン指定なしで記載する例
pandas
pywin32
openpyxl
ただしバージョン指定なしの場合には、コマンド実行時の最新バージョンのライブラリがインストールされてしまいます。
そうなると、実際にどのバージョンがインストールされるか分かりません。
つまりプロジェクトの環境が実行のタイミングごとに不安定になって、以下のようなデメリットが生じる可能性が出てきます。
- 非互換性の問題
- ライブラリのバージョンアップによって、書いたコードとの互換性がなくなる
- 安定性の問題
- ライブラリの最新バージョンが不安定な場合、予期せぬバグや問題が発生する
- 再現性の問題
- コマンドの実行時期によっては、同じ環境が再現できない
というわけで、バグや予期せぬ問題を回避するためにはバージョンまで指定するのがおすすめの運用方法になります。
バージョン指定してライブラリを指定
前項でご説明したとおり、requirements.txt にはバージョンまで指定しておくほうが良いです。
バージョン指定方法はいくつかバリエーションがありますので、一つずつ解説していきます。
厳密にバージョンを指定する方法
特定のバージョンを厳密に指定する場合は、==
を使います。
# バッチバージョンまで指定する方法
django == 3.2.1
上記ではパッチバージョンまで指定していますが、多くの場合はマイナーバージョンまでを指定することが多いと思います。
# マイナーバージョンまで指定する方法
django == 3.2
上記の場合には、3.2のうち最新のパッチが適用されたバージョンが指定されます。
パッチはバグやセキュリティ修正がされたものなので、特別な理由がない限りマイナーバージョンまでを指定することが多いかと思います。
特定のバージョン「以上」を指定する
特定のバージョン以上を指定する場合は、>=
とします。
django >= 3.2
この場合は、django の 3.2 以上のバージョンがインストールされることになります。
例えば django の最新バージョンが 3.2 以上なら、現在取得できる最新のバージョンがインストールされます。
特定のバージョン「以下」を指定する
特定のバージョン以下を指定する場合、<=
とします。
django <= 3.2
この場合は、以下の挙動になります。
- django 3.2が最新
- 3.2がインストールされる
- django 3.1が最新
- 3.1がインストールされる
特定のバージョンだけはインストールしたくない
特定のバージョンを除外する場合は、!=
とします。
djnago != 3.2.1
特定のバージョンにバグなどがある場合に有効です。
ただし、このような指定はあまり一般的ではないかと思います。基本的には他の方法でバージョン指定することを推奨します。
コメント