如何使用pyproject.toml设置和诗歌运行脚本?

时间:2019-12-11 13:33:35

标签: python python-poetry

  1. 我正在用诗歌来创建.whl文件。
  2. 我有一个在远程主机上运行的ftp服务器。
  3. 我写了一个python脚本(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。我在干什么,该如何解决?

将寻求任何帮助,谢谢!

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 开始工作