【Python】PyPI に自作パッケージを登録する手順まとめ

公開日:2019-05-12
最終更新:2019-05-24

多分 Python Packaging User Guide を読むのが一番早いと思います。
(割とgoogle翻訳でもちゃんと日本語が成り立ってて驚いた)

が、疑問とか手順の追加/入れ替えがいくらか発生したのでメモ。
※ GitHub にリポジトリを置くのが前提です。

手順

以下、echidna というパッケージ名の場合。

PyPI のアカウント登録

TestPyPIPyPI の両方に登録
https://test.pypi.org/user/1ntegrale9/
https://pypi.org/user/1ntegrale9/

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  

setuptoolswheel はパッケージング用
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="[email protected]",  
    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 に登録したパッケージを一旦削除して再度アップロードし直そうとしたら、
削除しても名前空間が保持されててできなかった(よく考えれば当たり前)
何かしらミスっても削除はしない方がよい。

記事が少しでもいいなと思ったらクラップを送ってみよう!
20
+1
備忘録のようなもの

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする