LoginSignup
29
23

More than 5 years have passed since last update.

pip 7.1 で追加された constraints file の使いドコロ

Posted at

はじめに

Python のライブラリをインストールするときに使用する pip に、バージョン 7.1 からある機能が追加されました。

Constraints File と呼ばれるその機能は、あまり有名ではありませんが、使い方によっては非常に便利な機能です。

Constraints File の機能

Constraints File と Requirements File の機能は非常によく似ており、そのフォーマットはまったく同一です。

違いはただ一点、Constraints File はバージョンを制御するだけで、記述したライブラリがインストールされることはありません。

例えば、次のようなファイルがあったとき

werkzeug.txt
werkzeug=== 0.11.1

次のように Requirements File として使用すると、werkzeug 0.11.1 がインストールされます。

pip install -r werkzeug.txt  # 0.11.1 がインストールされる

対して、Constraints File としてしていしても、werkzeug がインストールされることはありません。

pip install -c werkzeug.txt # なにもインストールされない

ですが、次のように引数と併用することで、インストールするバージョンを制御することが出来ます。

pip install werkzeug -c werkzeug # 0.11.1 がインストールされる

また、Requirements File と Constraints File を併用することも出来ます。

まとめると、以下のようになります。

$ pip install -r werkzeug.txt # 指定したバージョンがインストールされる
$ pip install -c werkzeug.txt # なにもインストールされない
$ pip install -r werkzeug.txt -c werkzeug.txt # 指定したバージョンがインストールされる
$ pip install werkzeug -c werkzeug.txt # 指定したバージョンがインストールされる

Constraints File の便利な使い方

Constraints File は、Requirements File と組み合わせることで真価を発揮します。

よくある Requirements File の使い方は、pip freeze の出力をそのまま書き込む、というものでした。しかし、この方法では、インストールしたライブラリと、そのライブラリの依存ライブラリを区別することが出来ません。

たとえば、A というライブラリが、B 及び C というライブラリに依存していたとします。そのとき、A をインストールした後に pip freeze すると、B 及び C まで出力され、それらを区別する方法はありません。

$ pip install A
$ pip freeze
A==1.0.0
B==1.0.0
C==1.0.0

ここで、直接依存するライブラリのみを Requirements File に記述し、pip freeze の結果を Constraints File に記述することで、直接依存しているライブラリと、間接的に依存しているライブラリを区別することが出来ます。

$ cat requirements.txt
A
$ cat constraints.txt
A==1.0.0
B==1.0.0
C==1.0.0
$ pip install -r requirements.txt -c constraints.txt

まとめ

本記事では、Constraints File について紹介しました。

まだまだ新しい機能ですので、ここで紹介した使い方以外にも、もっと便利な使い方ができるかもしれません。もしそんな便利な使い方を発見したら、是非教えていただけるとうれしいです。

参考

29
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
23