【Python】PyPI に自作パッケージを登録する手順まとめ
多分 Python Packaging User Guide を読むのが一番早いと思います。
(割とgoogle翻訳でもちゃんと日本語が成り立ってて驚いた)
が、疑問とか手順の追加/入れ替えがいくらか発生したのでメモ。
※ GitHub にリポジトリを置くのが前提です。
手順
以下、echidna というパッケージ名の場合。
PyPI のアカウント登録
GitHubでリポジトリを作る
設定は以下の通り。
- Public
- Initialize this repository with a README
- Add .gitignore: Python
- Add a license: MIT License
作ったらローカルに git clone
しておく。
必要なパッケージのインストール
$ python3 -m pip install --user --upgrade setuptools wheel twine
setuptools
と wheel
はパッケージング用
twine
はPyPIアップロード用
モジュールの作成
$ mkdir echidna
$ touch echidna/__init__.py
このディレクトリの名前でimportすることになる。
echidna/__init__.py
の中身は
name = "echidna"
と記述しておく。
後で以下を試すことになる。
import echidna
echidna.name
setup.py の作成
setup.py
はパッケージのインストールに必要なファイル。
Creating setup.py Python Packaging User Guide
のサンプルをコピーしてちょっと書き換える。
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="echidna",
version="0.0.1",
author="1ntegrale9",
author_email="1ntegrale9uation@gmail.com",
description="BOT and CLI framework for handling multiple services in python",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/1ntegrale9/echidna",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3.7",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)
author
author_email
は当然各個人で違うので自分のものを。
name
はパッケージ名に。
description
は適当にパッケージの簡単な説明を。
url
はGitHubのURLでよい。
classifiers
は書き換える必要なさそうだったけれども、
Python3系全体保証するのは怖かったので3.7に限定しておいた。
ローカルインストール
setup.py があれば pip install と同じことがローカルでできる。
( build
dist
egg-info
の作成も発生する)
$ python3 setup.py install
インストールできたら以下を試す。
$ python3
>>> import echidna
>>> echidna.name
'echidna'
大丈夫なら一旦アンインストールしておく。
python3 -m pip uninstall echidna
build
dist
egg-info
も消しておく。
PyPIへのアップロード
まずは公式のコマンドに従ってパッケージング
$ python3 setup.py sdist bdist_wheel
TestPyPIにアップロードする
$ python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*
この時 TestPyPI の username と password の入力を求められる
Enter your username:
Enter your password:
アップロードできたら、TestPyPI から pip install してみる
$ python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps echidna
大丈夫そうならuninstallしておく。
python3 -m pip uninstall echidna
PyPIにアップロード
$ python3 -m twine upload dist/*
pip install してみる。
python3 -m pip install echidna
おわり。
補足
TestPyPI に登録したパッケージを一旦削除して再度アップロードし直そうとしたら、
削除しても名前空間が保持されててできなかった(よく考えれば当たり前)
何かしらミスっても削除はしない方がよい。
Discussion