log_revision.py
),它将git commit,更多的参数保存在数据库中,最后将.whl(诗歌创建的)发送到远程服务器(每个.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'
1。有人可以帮我理解如何赞美吗?
作为一种短期选择(没有git和params),我尝试使用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
2。我在干什么,该如何解决?
将寻求任何帮助,谢谢!
答案 0 :(得分:1)
目前[tool.poetry.scripts]
部分相当于setuptools console_scripts。
因此,参数必须是有效的模块和方法名称。假设在您的软件包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 <you@example.com>"]
[tool.poetry.dependencies]
python = "^3.8"
[tool.poetry.scripts]
my-script = "my_package.log_revision:start"
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
和log_revision.py
中的
def start():
print("Hello")
运行poetry install
之后,您应该可以执行以下操作:
$ poetry run my-script
Hello
您不能直接将某些内容传递给start()
方法。相反,您可以使用命令行参数并解析它们,例如使用python argparse。
答案 1 :(得分:0)
对这样的问题摆弄了几个小时,找到了解决方案
我的任务是通过诗歌脚本启动 django 服务器。
这是目录。 manage.py 在测试文件夹中:
├── pyproject.toml
├── README.rst
├── runserver.py
├── test
│ ├── db.sqlite3
│ ├── manage.py
│ └── test
│ ├── asgi.py
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-39.pyc
│ │ ├── settings.cpython-39.pyc
│ │ ├── urls.cpython-39.pyc
│ │ └── wsgi.cpython-39.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── tests
│ ├── __init__.py
│ └── test_tmp.py
└── tmp
└── __init__.py
我必须创建一个文件 runserver.py:
import subprocess
def djtest():
cmd =['python', 'test/manage.py', 'runserver']
subprocess.run(cmd)
然后自己编写脚本pyproject.toml:
[tool.poetry.scripts]
dj = "runserver:djtest"
并且仍然对 pyproject.toml 进行更改:
[tool.poetry.scripts]
dj = "runserver:djtest"
然后命令诗歌运行 dj 开始工作