PythonのライブラリはPyPIに集約されています。そのため、便利なライブラリを作ったら、PyPIで公開するとみんなが喜んでくれるはずです。
パッケージの準備
PyPIでパッケージを公開するには、パッケージのファイル構成を工夫する必要があります。最低限以下のようなファイルを作ります。
.
├── LICENSE
├── README.md
├── パッケージ名
│ ├── __init__.py
│ └── モジュール.py
└── setup.py
パッケージ名/init.py の内容
Pythonでどのメソッドを公開するのか、また、バージョンなど記述します。
# 記述例
from .モジュール import get, set, hoge as keys
__version__ = "0.1.0"
setup.py の内容
以下がsetup.pyの内容。普通のPythonファイルのため、バージョン情報などは、一カ所にまとめておくと便利。
from setuptools import setup
# バージョン情報を参照するため
from パッケージ名 import __version__
setup(name="ライブラリ名",
author="作者名",
author_email="メールアドレス",
maintainer="作者名",
maintainer_email="メールアドレス",
description="簡単な解説",
long_description="長い解説",
long_description_content_type="text/markdown",
license="MIT" # ラインセスを指定
url="URL",
version=__version__, # バージョン情報
python_requires=">=3.6.0", # Pythonバージョン
install_requires=[], # 依存パッケージ ["ライブラリ>=バージョン"]のように書く
extras_require={},
packages=find_packages(exclude=["tests", "*.tests", "*.tests.*", "tests.*"]),
classifiers=["Programming Language :: Python :: 3"] # 分類情報
)
パッケージをビルドする
ビルドに必要なモジュールをインストールしておきましょう。
python3 -m pip install twine wheel
そしてビルドしましょう。
python3 setup.py sdist
python3 setup.py bdist_wheel
PyPIに登録して設定ファイルを保存
PyPIにサインアップして、アカウント設定ページから「API token」を作成しましょう。
そして、~/.pypirc
というファイルに表示された以下のようなデータを保存します。(ちなみに、以下のキーは無効な適当なキーです。)
[pypi]
username = __token__
password = pypi-AgEIcHlwaS5vcmcCJ3lYW5VhMD6ATRhMzZhYmVhZjJlZQACJXsicGVybWlzc2lvbccMOiAidXNlciIsICxxxxxxxxxxxuIjogMX0AAAYgwKuqpKoqQjCobp41bcp93hul9Zc0HT7-ilztjnbVaaM
公開しよう
PyPIにいきなり本公開する前に、テストサイトに公開して、どんな風に公開されるのか確認できます。なお、テストサイトと本サイトは独立していますので、テストサイトでも、ユーザー登録が必要です。同じように、API tokenを作成して、~/.pypircに追加しましょう。
以下のコマンドを実行すると、テストサイトに公開されます。
twine upload --repository testpypi dist/*
公開して問題なさそうなら、本番に公開しましょう。
twine upload --repository pypi dist/*
バージョンアップ
上記の手順でビルドすると、とと<パッケージ名.egg-info>というディレクトリが自動で作成されます。そこで、最初にクリアしておくと分かりやすいです。
rm -f -r dist
rm -f -r build
rm -f -r パッケージ名.egg-info
そして、バージョンを変更してから、改めて、上記のパッケージビルドを実行しましょう。
サンプルパッケージ
一度、自分でパッケージを公開してみたいと思ったので、pykvs_lite
というライブラリを作ってみました。
最小構造で作っていますので、参考にしてみてください。
参考
-
https://qiita.com/c60evaporator/items/e1ecccab07a607487dcf
- ↑とても参考になりました。この記事の3倍詳しいです。ありがとうございました!!