小ネタ集 (Tips written in Japanese)
以下の項目の解説は行わないのですが、検索すると直ぐに出てくると思いますので、必要に応じてご確認下さい。
. <--- 作業用フォルダ
├── README.md
├── build <-自動生成
├── dist <-自動生成
├── <package_name>
│ ├── __init__.py
│ └── __main__.py
├── <package_name>.egg-info <-自動生成
├── setup.cfg <-作成
└── setup.py <-作成
~/.pypirc <-作成
.gitignore
に以下を追加しておく。これらのフォルダ中のデータは作業後消去可能。build/
dist/
<package_name>.egg-info/
新たな version を追加する場合は(<package_name>.__version__
などを更新後に) 更新時に必要な手順を実行。
setup.py
に以下のみを記載
from setuptools import setup
setup()
setup.cfg の作成
;
はその後ろの条件が True の場合にのみその前のパッケージが必要となるという意味。
install_requires =
importlib; python_version == "2.6"
dist の作成に必要となるパッケージのインストール
pip install twine wheel
PyPI テストサイトおよび本番サイトへのユーザ登録
登録コマンド省略するための設定
~/.pypirc
に記載。 [distutils]
index-servers =
pypi
testpypi
[pypi]
repository: https://upload.pypi.org/legacy/
username: <上記で登録したユーザ名>
# password: <パスワードは記載しない>
[testpypi]
repository: https://test.pypi.org/legacy/
username: <上記で登録したユーザ名>
# password: <パスワードは記載しない>
以下の更新時に必要な手順を実行
以下の手順の実行は、こちらの bash script を以下の引数で実行することでも可能です。
./pypi.sh <package_name> <package_ver>
soft と binary の dist を作成しチェック
以下のコマンドを実行
python setup.py sdist bdist_wheel
twine check ./dist/*
以下のように PASSED
が表示されれば次に進む。
Checking dist/<package_name>-<version>*: PASSED
テスト環境を作り、そこに上記 dist 下につくられたローカルパッケージをインストールしテスト
以下のコマンドにより
pip install --no-index --find-links=<上記でチェックしたdistへのPATH>/dist <package_name>==<version>
ERROR: Could not find a version that satisfies the requirement scipy (from <package_name>)
ERROR: No matching distribution found for scipy
install_requires =
の下に1行づつ入れる。pip install --no-index --find-links=
によるローカルフォルダからのパッケージインストールでは、install_requires =
に記載したパッケージは自動インストールされないため、インストールしたパッケージの動作確認が終われば次に進む。pip list
により意図する version の PyPI テストサイトへのアップロードとインストール
以下のコマンドで PyPI テストサイトへアップロード
twine upload -r testpypi dist/<package_name>-<version>*
初期状態に戻したテスト環境(Python仮想環境)へ移動し、パッケージをダウンロードし動作をテスト
pip uninstall <package_name>
pip install -i https://test.pypi.org/simple/ <package_name>==<version>
PyPI 本番サイトへのアップロードとインストール
以下のコマンドで PyPI 本番サイトへアップロード
twine upload -r pypi dist/<package_name>-<version>*
初期状態に戻したテスト環境(Python仮想環境)へ移動し、パッケージをダウンロードし動作をテスト
pip uninstall <package_name>
pip install <package_name>==<version>
PyPIに反映される前に
pip install
を実行すると以下のようなエラーになる。その場合は、しばらく時間を置いてから再実行
ERROR: No matching distribution found for <version>
Python 3.8.0
pip 21.3.1
setuptools 60.2.0
twine 3.4.1
wheel 0.35.1
Python 3.8.5
pip 21.0.1
setuptools 50.3.2
twine 3.4.1
wheel 0.35.1
最後までお読み頂きありがとうございます。 GitHubアカウントをお持ちでしたら、フォロー及び Star 頂ければと思います。リンクも歓迎です。