pyproject.toml 設定と詩を使用してスクリプトを実行するにはどうすればいいですか? 質問する

pyproject.toml 設定と詩を使用してスクリプトを実行するにはどうすればいいですか? 質問する

私は poetry を使用して .whl ファイルを作成しています。リモート ホストで FTP サーバーを実行しています。gitlog_revision.pyコミットといくつかのパラメーターをデータベースに保存し、最後に .whl (poetry が作成したもの) をリモート サーバーに送信する Python スクリプト ( ) を作成しました (各 .whl はサーバー内の異なるパスにあり、パスは DB に保存されます)。

現時点では、poetry buildコマンドを実行するたびにスクリプトを手動で実行しています。 がpyproject.tomlあることは知ってい[tool.poetry.scripts]ますが、それを使用して Python スクリプトを実行する方法がわかりません。

私は試した:

[tool.poetry.scripts]
my-script = "my_package_name:log_revision.py

しかしpoetry run my-script、常にエラーが発生します:

AttributeError: module 'my_package_namen' has no attribute 'log_revision'

このコマンドを実行するにはどうすればよいですか? 短期的なオプションとして (git とパラメータなし) 使用しようとしましたpoetry publish -r http://192.168.1.xxx/home/whl -u hello -p worldが、次のエラーが発生します。

[RuntimeError]                                 
Repository http://192.168.1.xxx/home/whl is not defined  

何が間違っているのでしょうか、どうすれば修正できるでしょうか?

ベストアンサー1

現時点では[tool.poetry.scripts]セクションはsetuptoolsと同等ですコンソールスクリプト

したがって、引数は有効なモジュールとメソッド名でなければなりません。パッケージ 内に がありmy_packagelog_revision.pyメソッド があるとしますstart()。その場合、次のように記述する必要があります。

[tool.poetry.scripts]
my-script = "my_package.log_revision:start"

完全な例を次に示します。

フォルダ構造は次のようになります:

my_package
├── my_package
│   ├── __init__.py
│   └── log_revision.py
└── pyproject.toml

関数の完全な内容は次のとおりpyproject.tomlです。

[tool.poetry]
name = "my_package"
version = "0.1.0"
description = ""
authors = ["Your Name <[email protected]>"]

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

[tool.poetry.scripts]
my-script = "my_package.log_revision:start"

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

そしてmy_package/log_revision.py

def start():
    print("Hello")

一度実行すると、poetry install次の操作を実行できるようになります。

$ poetry run my-script  
Hello

メソッドにstart()直接何かを渡すことはできません。代わりに、コマンドライン引数を使用して解析することができます。たとえば、Pythonのargparse

おすすめ記事