PyPIに自作パッケージをアップロードする方法

PyPIに自作のPythonパッケージをアップロードする際の備忘録です。

基本的な流れとしては「twineでパッケージ作成 -> Test PyPIで動作確認 -> PyPIにアップロード」です。
アップロードしたいパッケージは既に用意できているのを前提とします。

事前準備

  1. Test PyPIとPyPIそれぞれでアカウントを作成
    1. PyPIのアカウント登録
    2. Test PyPIのアカウント登録

アップロード作業

基本的には以下の流れでやれば大丈夫です。ただしTest PyPIからのインストールは少し躓くのと注意が必要なので気をつけてください(理由後述)。そのため、個人的にはTest PyPIでの動作確認はスキップしてしまうのが楽だと思いますし、私自身はそうしています。

  1. twine用の仮想環境用意

    % Switch to your package directory
    python3 -m venv .venv_pypi
    source .venv_pypi/bin/activate
    python3 -m pip install --upgrade pip
    python3 -m pip install --upgrade setuptools wheel twine
  2. 配布物の作成

    python setup.py bdist_wheel sdist
  3. Test PyPIへのアップロードと確認(任意)

    twine upload -r testpypi dist/*

    deactivate
    python3 -m venv .venv_test
    source .venv_test/bin/activate
    pip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple YOUR_PACKAGE_NAME
    deactivate
  4. PyPIへのアップロード

    source .venv_pypi/bin/activate
    twine upload -r pypi dist/*

注意点

Test PyPI

前述した通り、Test PyPIからパッケージをインストールしようとする際にはいくつか躓くポイントがあります。

  1. Test PyPIに依存ライブラリが存在しない場合エラーが出る
  2. –extra-index-urlでPyPIを指定すればうまくいくこともあるが、このオプションをあまり理解せず利用すると危険であることも指摘されているので注意が必要

が主に挙げられます。
自作ライブラリに依存パッケージがそれなりにある場合は、これに対応するのがけっこう大変なので細心の注意を払ってテストなしで直接PyPIにアップロードしてしまうのが楽だったりします。

Pythonファイル(.py)以外をパッケージに含める方法

特に何も指定しない限りはsetup.pyでパッケージを作成する場合はPythonファイルしか含まれません。
しかしパケージに必要なファイルを含めたいときはけっこうあると思います。
その場合は関数setup()にてキーワード引数package_dataに指定すると追加することができます。

おわりに

自作ライブラリをPyPIに公開する機会があったので、自分が躓いた箇所も含めて備忘録としてまとめました。
慣れてしまえば作業自体は簡単ですが、ライブラリ自体のバージョン管理を適切にやることのほうが難しいなと思う今日このごろ。

それでは。

参照

PyPIに自作パッケージをアップロードする方法

https://sishida21.github.io/2022/12/17/upload-package-to-pypi/

Author

Shoichi Ishida

Posted on

2022-12-17

Updated on

2022-12-19

Licensed under