setup.pyのdistで作られたパッケージに含まれないファイルを含めるようにする。(MANIFEST.in)

気づかないでハマったのでメモ。

pythonでパッケージを作成するとき

setup.pyを書き、以下のコマンドを実行するとpypiに転送可能なように整えてパッケージングしてくれる。
(デフォルトでカレントディレクトリのdist以下にwindowsでzip,unixでtar.gz形式のファイルを作ってくれる)

python setup.py sdist

しかし、pythonモジュールに含まれないファイル(pythonのファイルとしてimportすることを想定されていないファイル)を含めてくれない。
このファイルをパッケージに含めたい場合はMANIFEST.iniを書く。

実際の例

このようなディレクトリ構成のパッケージを作りたいとする。

.
└── foo
    ├── __init__.py
    ├── bar
    │   ├── __init__.py
    │   ├── boo.py
    │   └── doc
    │       ├── howto.txt
    │       └── memo.txt
    └── core.py

3 directories, 6 files

以上のようなディレクトリ構成の時、モジュールに含まれないファイルは以下の通り

  • foo/bar/doc/howto.txt
  • foo/bar/doc/memo.txt

これらを含めたい。

MANIFEST.iniに以下を書く。

recursive-include foo *

ちなみに含める個別に指定する場合はincludeを使う。(e.g. CHANGES.txtなど)

include CHANGES.txt