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

ゴール
この記事では、Pythonでパッケージを作る方法を紹介します。ChatGPT 4やググール検索を使って調べた結果をまとめています。
以下のようなパッケージを作ることを目標とします。
- https://github.com/aragig/gifify
- https://github.com/aragig/gspread_downloader
あくまでも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でインストール可能になります:
pip3 install git+https://github.com/aragig/gifify
パッケージに必要なファイル
例えば、FFmpegを使って動画からGIFアニメに変換するヘルパーパッケージ「gifify」の例をご紹介します。プロジェクトのディレクトリ構成は次の通りです:
$ 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.py
と gifiy
ディレクトリです。setup.py
は次のようになります:
from setuptools import setup, find_packages
setup(='gifify',
name='0.1.0',
version=find_packages(),
packages='PythonからFFmpegをコールして動画をGIFアニメーション化',
description=open('README.md').read(),
long_description='text/markdown',
long_description_content_type='Toshihiko Arai',
author='i.officearai@gmail.com',
author_email='MIT',
license='https://github.com/aragig/gifify',
url=[
install_requires
],=[
classifiers'Programming Language :: Python :: 3',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
],='>=3.9',
python_requires )
name
がパッケージ名になります。先ほどの階層のように、パッケージ名前でディレクトリを作成し、その中にソースコードを配置します。パッケージの
__init__.py
には次のようにアクセス可能な関数を記述します。
from .main import convert_to_anime_gif
__all__ = ["convert_to_anime_gif"]
制作したパッケージに依存関係がある場合は、setup.py
の install_requires
に記述します。この例では、FFmpegを使っているので、install_requires
には記述しません。
=[
install_requires'gspread',
'oauth2client'
],
パッケージをpipでインストールする際に、これらの依存関係が自動的にインストールされます。
パッケージのインストール
パッケージをインストールするには、次のようにします:
pip3 install -e .
-e
オプションを付けると、パッケージのソースコードが変更された場合に、自動的に更新されます。
GitHubに公開
またGitHubに公開後は、次のようにしてインストールします:
pip3 install git+https://github.com/aragig/gifify
ブランチやバージョン(タグ)指定も可能です。
pip3 install git+https://github.com/aragig/gifify@develop
pip3 install git+https://github.com/aragig/gifify@0.1.0
感想
Pythonでは兄弟ディレクトリのモジュール参照が非常に苦手です。パッケージ化することでディレクトリ階層を意識することなく、モジュールにアクセスできて便利になりました。また、依存関係も疎になりますので、再利用可能で保守管理しやすくなりました。
今後の課題としてパッケージのテスト方法や、
__init__.py
の仕組みを学ぶ必要がありそうです。また、PyPIに公開できるようなパッケージの制作がいずれできたらと思います。
関連記事
- ESP-IDFでESP32の開発をはじめよう!
- Python venvで仮想環境とpip freezeを使う方法
- Raspberry Pi に Tomcat9 を手動インストールする
- 【シェル】waifu2xで劣化した写真や画像を高画質化【macOS】
- 【Raspberry Pi】はじめてのI2C設定