🚚

【python】自作ライブラリをpipに登録する時の覚え書き

2023/10/01に公開

概要

  • PyPIのアカウント作成
    • APIキーの取得
    • 設定ファイルの作成
  • pyproject.toml の編集
  • パッケージのビルド
  • PyPITestへの登録
  • PyPIへの登録

この記事に書かないこと

  • ライブラリの作り方
  • 公開した自作OSSを有名にする方法(こちらの記事を参照)

ディレクトリ構成

my-library/
├── LICENSE
├── pyproject.toml
├── README.md
├── my_library/
│   ├── __init__.py
│   └── Main.py
├── example/
└── tests/

PyPIのアカウント作成

本番用
https://pypi.org

テスト用
https://test.pypi.org/

APIキーの取得

アカウント設定から。本番用とテスト用でそれぞれ取得する。

  1. 二要素認証を設定する
  2. APIトークンを追加する
  3. 発行された pypi- ではじまるAPIトークンを覚えておく

設定ファイルの作成

ホームディレクトリに下記のファイルを作成する。
Windowsの場合は C:\Users\<ユーザー名>\.pypirc
password のところに上で取得したAPIトークンを入力する。

.pypirc
[distutils]
index-servers =
  pypi
  pypitest

[pypi]
repository=https://upload.pypi.org/legacy/
username=__token__
password=pypi-xxxxxx

[pypitest]
repository=https://test.pypi.org/legacy/
username=__token__
password=pypi-xxxxxx

pyproject.toml の編集

pythonのドキュメントの記載例を真似して書く。

pyproject.toml
[project]
name = "my_library"
version = "0.1.0"
description = "That's one giant leap for me, one small step for mankind."
readme = "README.md"
requires-python = ">=3.8"
license = {file = "LICENSE"}
authors = [
  {name = "Brett Cannon", email = "brett@python.org"}
]
classifiers = [
  "Development Status :: 4 - Beta",
  "Programming Language :: Python :: 3",
  "Topic :: Multimedia :: Graphics",
  "Topic :: Scientific/Engineering :: Visualization",
]
dependencies = [
  "matplotlib",
  "seaborn",
]

[project.urls]
Repository = "https://github.com/me/my_library.git"

パッケージのビルド

build を使う。

python -m pip install --upgrade build

プロジェクトの階層(pyproject.tomlがあるディレクトリ)で下記を実行する。

python -m build

成功すれば、distディレクトリにファイルが2つ生成される。

PyPITestへの登録

twine を使う。

python -m pip install --upgrade twine

下記を実行する。

python -m twine upload --repository pypitest dist/*

成功すれば、https://test.pypi.org/project/... に自作パッケージが表示される。

PyPIへの登録

下記を実行する。

python -m twine upload dist/*

成功すれば、https://pypi.org/project/... に自作パッケージが表示される。

参考にした記事

https://zenn.dev/karaage0703/articles/db8c663640c68b
https://blog.amedama.jp/entry/2017/12/31/175036
https://nikkie-ftnext.hatenablog.com/entry/why-dont-you-write-pyproject-toml-instead-of-setup-py
https://qiita.com/sasaco/items/229bc44a3f6f2330361d

Discussion