进行诗歌初始化时,我得到以下结构:
/packagename
__init__.py
packagename.py
/packagename
/tests
__init__.py
test_packagename.py
pyproject.toml
这对于一个程序包来说很好,但是我看不到如何使其适合命令行脚本。 当我有一个具有以下代码结构的脚本:script.py时:
在文件script.py中:
#!/usr/bin/python3
def main():
print("Ok")
if __name__ == '__main__':
main()
它不打算用作python模块,但是,它可能具有一些有趣的依赖关系和测试,可以用诗歌来处理。
在某些example中,它显示为具有以下诗歌语法:
[tool.poetry.scripts]
cli_script = 'script.py:main'
然后可以使用以下命令调用脚本:
poetry run cli_script
我正在寻找有关如何正确组织我的诗歌项目以用于此类用途的指南。
例如,我一直在寻找诗歌初始化的选项(例如诗歌初始化--script)。但似乎这种用例并未包含在新的/初始诗歌选项中。
答案 0 :(得分:1)
通过“诗歌初始化”,我猜你的意思是poetry new
。但是,然后您的结构看起来有点怪异。我建议采用以下结构:
packagename
├── packagename
│ ├── __init__.py
│ └── cli.py
├── tests
│ ├── __init__.py
│ └── test_packagename.py
└── pyproject.toml
pyproject.toml
看起来像这样:
[tool.poetry]
name = "packagename"
version = "0.1.0"
description = ""
authors = ["finswimmer <finswimmer@example.org>"]
[tool.poetry.scripts]
cli_script = "packagename.cli:main"
[tool.poetry.dependencies]
python = "^3.6"
[tool.poetry.dev-dependencies]
pytest = "^5.2"
[build-system]
requires = ["poetry>=1.0"]
build-backend = "poetry.masonry.api"
您cli.py
如您的示例:
#!/usr/bin/python3
def main():
print("Ok")
if __name__ == '__main__':
main()
在poetry install
之后,您可以运行poetry run cli_script
。
答案 1 :(得分:1)
或者你可以运行:
poetry run python3 script.py
哪里:
script.py
是具有 python 代码的文件的名称。python3
是诗歌虚拟环境中的 python 可执行文件。这也可以是 python
,具体取决于您拥有的 Python 版本。在执行上述命令之前,您可以使用 poetry run python3 -V
或 poetry run python -V
进行确认。这个命令也可以在 crontab
中使用来调度简单的脚本。