Pythonではじめてのパッケージの作り方

Pythonではじめてのパッケージの作り方
Pythonではじめてのパッケージの作り方

この記事では、Pythonでパッケージを作る方法を紹介します。ChatGPT 4やググール検索を使って調べた結果をまとめています。

ゴール

以下のようなパッケージを作ることを目標とします。

あくまでもGitHubに公開することを目標とします。PyPIに公開することは目標としません。

flowchart TD A[スタート] --> B[GitHubリポジトリの選定] B --> C[パッケージ用ディレクトリの作成] C --> D[ソースコードの準備] D --> E[setup.pyの作成] E --> F[依存関係の定義] F --> G[README.mdの作成] G --> H[テストの作成] H --> I[GitHubに公開] I --> J[終了] subgraph 定義 E F end subgraph 準備 B C D end subgraph 公開 G H I end

GitHubへ公開後は、次のようにしてpipでインストール可能になります:

shell
pip3 install git+https://github.com/aragig/gifify

パッケージに必要なファイル

例えば、FFmpegを使って動画からGIFアニメに変換するヘルパーパッケージ「gifify」の例をご紹介します。プロジェクトのディレクトリ構成は次の通りです:

shell
$ tree -I 'build|__pycache__|gifify.egg-info'
.
├── README.md
├── gifify
│   ├── __init__.py
│   └── main.py
├── main.py
├── setup.py
└── tests
    ├── main.py
    ├── test.mov
    └── test_anime.gif

ここで大事なのは、setup.pygifiy ディレクトリです。setup.pyは次のようになります:

setup.py
from setuptools import setup, find_packages

setup(
    name='gifify',
    version='0.1.0',
    packages=find_packages(),
    description='PythonからFFmpegをコールして動画をGIFアニメーション化',
    long_description=open('README.md').read(),
    long_description_content_type='text/markdown',
    author='Toshihiko Arai',
    author_email='i.officearai@gmail.com',
    license='MIT',
    url='https://github.com/aragig/gifify',
    install_requires=[
    ],
    classifiers=[
        'Programming Language :: Python :: 3',
        'License :: OSI Approved :: MIT License',
        'Operating System :: OS Independent',
    ],
    python_requires='>=3.9',
)
name がパッケージ名になります。先ほどの階層のように、パッケージ名前でディレクトリを作成し、その中にソースコードを配置します。パッケージの __init__.py には次のようにアクセス可能な関数を記述します。
__init__.py
from .main import convert_to_anime_gif

__all__ = ["convert_to_anime_gif"]

制作したパッケージに依存関係がある場合は、setup.pyinstall_requires に記述します。この例では、FFmpegを使っているので、install_requires には記述しません。

setup.py
    install_requires=[
        'gspread',
        'oauth2client'
    ],

パッケージをpipでインストールする際に、これらの依存関係が自動的にインストールされます。

パッケージのインストール

パッケージをインストールするには、次のようにします:

shell
pip3 install -e .
-e オプションを付けると、パッケージのソースコードが変更された場合に、自動的に更新されます。

GitHubに公開

またGitHubに公開後は、次のようにしてインストールします:

shell
pip3 install git+https://github.com/aragig/gifify

ブランチやバージョン(タグ)指定も可能です。

shell
pip3 install git+https://github.com/aragig/gifify@develop
pip3 install git+https://github.com/aragig/gifify@0.1.0

感想

Pythonでは兄弟ディレクトリのモジュール参照が非常に苦手です。パッケージ化することでディレクトリ階層を意識することなく、モジュールにアクセスできて便利になりました。また、依存関係も疎になりますので、再利用可能で保守管理しやすくなりました。 今後の課題としてパッケージのテスト方法や、 __init__.py の仕組みを学ぶ必要がありそうです。また、PyPIに公開できるようなパッケージの制作がいずれできたらと思います。

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム

Python学習にオススメの本をご紹介!
Pandasでデータサイエンスはじめよう!
スクレイピングにオススメの書籍

▼ Beautiful Soup4を使ったWebクローリングをはじめ、表データをpandasやOpenPyXL、matplotでデータ解析、グラフ表示などのスクレイピングのやり方が分かりやすく説明されてます。図解が多いのでPython初心者の方でも読み進められる内容となってます。