Python のパッケージ同士が、どのように依存しているかを調べるのは意外と面倒くさい。 そんなときは今回紹介する pipdeptree を使うと楽ができそう。
使った環境は次の通り。
$ sw_vers ProductName: Mac OS X ProductVersion: 10.11.5 BuildVersion: 15F34 $ python --version Python 3.5.1
下準備
まずは pip を使って pipdeptree をインストールしておく。
$ pip install pipdeptree
使ってみる
インストールすると pipdeptree コマンドが使えるようになる。 このコマンドを使うと、今の Python 実行環境にインストールされているパッケージの依存関係が得られる。
$ pipdeptree wheel==0.29.0
今回は virtualenv を使って仮想環境を作った直後にインストールしている。 先ほど wheel しか表示されなかったのはそのため。
$ pip list pip (8.1.2) pipdeptree (0.6.0) setuptools (21.2.1) wheel (0.29.0)
次に、依存パッケージがそれなりに多いものとして、試しに Flask をインストールしてみよう。
$ pip install Flask
もう一度 pipdeptree を実行すると、インストールした Flask の依存関係が表示される。
$ pipdeptree Flask==0.10.1 - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.8] - MarkupSafe [installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.11.9] wheel==0.29.0
要求するバージョンとインストールされているバージョンが表示されるのが親切だね。
バージョンの衝突を検出する
Python を扱っていて、たまに悩ましいのがパッケージが使っているバージョンがそれぞれ違ったりするところ。 pipdeptree では、それらの衝突も検出できる。
例えば Flask はテンプレートエンジンとして Jinja2 を依存パッケージとしている。 そして Flask のバージョンが 0.10.1 であれば Jinja2 はバージョン 2.4 以上が必要だ。 そこで、試しに Jinja2 のバージョンを 2.4 未満にダウングレードさせてみよう。
$ pip install -U "Jinja2<2.4"
この状況で改めて pipdeptree を実行してみる。 すると、バージョンがコンフリクトしていることが警告として得られた。
$ pipdeptree Warning!!! Possibly conflicting dependencies found: * Flask==0.10.1 - Jinja2 [required: >=2.4, installed: 2.3.1] ------------------------------------------------------------------------ Flask==0.10.1 - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.3.1] - Werkzeug [required: >=0.7, installed: 0.11.9] wheel==0.29.0
まとめ
- pipdeptree を使うとパッケージの依存関係がわかる
- さらに、依存しているパッケージのバージョンがコンフリクトしていないかもチェックできる
スマートPythonプログラミング: Pythonのより良い書き方を学ぶ
- 作者: もみじあめ
- 発売日: 2016/03/12
- メディア: Kindle版
- この商品を含むブログを見る