私は 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_package
、log_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
。