Do1e

Do1e

github
email

Poetryを使用してPythonプロジェクトをwheel形式でパッケージ化する

この文は Mix Space によって xLog に同期更新されました
最適なブラウジング体験を得るために、元のリンクを訪問することをお勧めします
https://www.do1e.cn/posts/code/poetry


起因#

現在、これら 2 つの Python パッケージを維持しています:

以前はsetup.pyを使用してパッケージ化していましたが、11 月にNJUloginを更新した際に、次のようなメッセージが表示されました:

********************************************************************************
Python 2.7のサポートが終了したため、ユニバーサルホイールのビルドサポート
(つまり、Python 2とPython 3の両方をサポートするホイール)が廃止されます。
このオプションの使用を中止してください。まだ必要な場合は、
使用ケースを説明する問題をpypa/setuptoolsに提出してください。

2025年8月30日までに、プロジェクトを更新し、非推奨の呼び出しを削除する必要があります。
さもなければ、ビルドはサポートされなくなります。
********************************************************************************

そのため、新しいpyproject.tomlを使用してパッケージ化することに決めました。その時、Poetryを一時的に学び、NJUloginに適応させました。今日はmijia-apiを更新する際に、ついでに適応させようと思ったのですが、使い方を忘れてしまったので、ブログに記録しておくことにします。今後はPoetryを使って依存関係を管理することが多くなりそうです。

元のパッケージスクリプト ```powershell remove-item dist -force -recurse python setup.py sdist build python setup.py bdist_wheel --universal twine upload dist/* ```

Poetry#

Poetryの公式サイトでは、自身の位置付けを次のように説明しています:Python のパッケージングと依存関係管理を簡単に。使い方は少しnpmに似ています(nodejs にある程度の理解がある場合)。コマンドラインを通じて依存関係のファイルを変更・管理します。

ただし、poetry は少し長いので、これからはpopと呼ぶことにしましょう。

alias pop='poetry'
Set-Alias pop poetry

インストール#

直接ドキュメントを確認してください:https://python-poetry.org/docs/#installation
私はここで pipx を使用してインストールしています。

既存プロジェクトの初期化#

pop init

次のpyproject.tomlファイルが得られます。

[tool.poetry]
name = "mijiaapi"
version = "0.0.0"
description = "A Python API for Xiaomi Mijia"
authors = ["Do1e <[email protected]>"]
license = "GPLv3"
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.12"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

ただし、私のパッケージには大文字が含まれているため、[tool.poetry]の下のnameを変更し、さらに手動でpackages項目を追加し、setup.pyの他の設定も追加する必要があります:

2c2
< name = "mijiaapi"
---
> name = "mijiaAPI"
7a8,17
> homepage = "https://github.com/Do1e/mijia-api"
> repository = "https://github.com/Do1e/mijia-api"
> packages = [
>     {include = "mijiaAPI"}
> ]
> classifiers = [
>     "Programming Language :: Python :: 3",
>     "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
>     "Operating System :: OS Independent",
> ]

Peotry 仮想環境の新規作成と依存関係のインストール#

デフォルトでは~/.cache/pypoetryに仮想環境が作成されますが、pop configを使用して変更できます。詳細はこちらのドキュメントを参照してください。私は個人的にプロジェクトディレクトリに置くのが好きです:

# プロジェクトディレクトリに仮想環境を配置する
pop config virtualenvs.in-project true
# 新しい仮想環境を作成して使用する
pop env use python
# conda環境で使用する場合は必要ありません。既存のconda環境が直接使用されます。
source .venv/bin/activate

その後、requirements.txtから依存関係を一つずつインストールできます。次のコマンドは依存関係をpyproject.tomlファイルに書き込み、poetry.lockを生成します:

pop add requests qrcode

Peotry の大きな利点は、依存関係をツリー形式で表示できることです:

pop show --tree
# qrcode 8.0 QR Code image generator
# └── colorama *
# requests 2.32.3 Python HTTP for Humans.
# ├── certifi >=2017.4.17
# ├── charset-normalizer >=2,<4
# ├── idna >=2.5,<4
# └── urllib3 >=1.21.1,<3

これで、元のsetup.pyを削除できます。

パッケージ化と公開#

バージョンはpoetry-dynamic-versioningを使用して動的に指定でき、毎回pyproject.tomlのバージョン番号を変更する必要はありません。

git tag v1.3.0
pop self add "poetry-dynamic-versioning[plugin]"
pop dynamic-versioning enable

これで、簡単に 1 行のコマンドでビルドできます:

pop build

twine が~/.pypircに pypi のトークンを保存するのとは異なり、Poetry は追加の設定が必要です:

pop config pypi-token.pypi pypi-xxxxxx

そして、公開できます!

pop publish
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。