10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

パッケージの依存を分割して pip install する

Posted at

概要

pip install する際、依存する外部パッケージを選択してインストールできる extras_require 書き方を記します。
次のような状況において必要な外部パッケージを選択してインストールする場合に有効です。

  • インストールされる外部パッケージを最小限にしたい。
  • テストコードを実行するために必要なパッケージを含めたインストールを行いたい。

問題点として

pip install には様々な便利機能があるものの、公式ドキュメントや pip のドキュメントをよく見ないと書き方がわかりづらい。

setup.py の書き方

setup 関数の中に extras_require を加えます。

setup(
    name="example",
    ...
    install_requires=[        ← ここには必須となる外部パッケージを記載します。
        "requests"],
    extras_require={          ← ここにはオプション機能として、インストール時に追加したい機能向けの外部パッケージを辞書形式で記載します。
        'test':  ["nose"],
        'doc': ["sphinx"],
    }
)

extras_require

  • 必須ではないオプション機能で使用する外部パッケージを extras_require に辞書形式で指定します。
  • これらのオプション機能で使う外部パッケージは、インストール時に明示的に指定することでインストールされます。
  • この例ではテストを実行する場合のみに必要になる nose とドキュメント生成を実行したい場合のみに必要になる sphinx を指定しています。

pip install の書き方

extras_require のパッケージを pip install する場合は [] で extras のキー名を指定します。

次のようになります。

pip install example[test]
pip install example[doc]
pip install example
  • 1番目はテストで使用する外部パッケージ込みのインストールを行います。
  • 2番目はドキュメント生成のための外部パッケージ込みのインストールを行います。
  • 両方同時に指定することもできます example[test, doc]
  • 3番目は必須外部パッケージ requests のみがインストールされます。

(応用例1) Dask

広く使われているパッケージ Dask ではこの仕組みを積極的に利用し、不要な外部パッケージを極力インストールしないような工夫がなされています。

参考ドキュメント

開発中のアプリが扱う内容が多岐にわたり、それぞれ独立性が高い場合には、この手法で依存パッケージのインストールを最小限に抑えることができます。

(応用例2) GitHub から直接 pip install する

GitHub 上のリポジトリから直接ローカルにインストールすることも可能です。

$ pip install "git+https://github.com/dask/dask.git#egg=dask"[complete]

クォーテーションマークの囲まれ方に注意が必要です。

参考

10
5
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
10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?