この文は 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