Python

Pythonの自作パッケージの作り方

自作パッケージを作る際に、MANIFEST.in に記載したjsonファイルが
pip installした時にライブラリに入っていなかったので調査した結果メモ。

結論

setup.pyに include_package_data=True と記載すればよかった。

ディレクトリ構成

.
├── tests
├── requirements.txt
├── MANIFEST.in
├── setup.py
└── src
    ├── config
    |   └── config.json
    └── main.py

大まかにこんな感じ。

requirements.txt

依存ライブラリを記載しておく。
現環境で使用しているライブラリの書き出しは以下コマンドでできる。

pip freeze > requirements.txt

MANIFEST.in

何も指定しないと、 .py のファイルしかパッケージに入れないため
.json などの設定ファイルも入れたい場合は、用意する必要がある。

include requirements.txt
include src/config/*.json

ワイルドカードが使用できる。

setup.py

# -*- coding: utf-8 -*-
from setuptools import setup, find_packages

import os

def load_requires_from_file(fname):
    if not os.path.exists(fname):
        raise IOError(fname)
    return [pkg.strip() for pkg in open(fname, 'r')]

setup(
    name='package_name',

    version='0.0.1',

    url='GitHubのURLなど',

    install_requires=load_requires_from_file('requirements.txt'),

    # testsはパッケージに入れる必要が無いので除外
    packages=find_packages(exclude=['tests']),

    # MANIFEST.in を使うために必要
    include_package_data=True,
)