`poetry run black myscript.py` 和 `black myscript.py` 有什么区别?

zab*_*bop 8 python python-black python-poetry

基于诗歌文档

同样,如果您有命令行工具,例如pytestblack您可以使用以下命令运行它们poetry run pytest

使用黑色的建议方法是:

poetry run black myscript.py
Run Code Online (Sandbox Code Playgroud)

但是,如果我只使用,我没有注意到行为有任何差异

black myscript.py
Run Code Online (Sandbox Code Playgroud)

这两种方法有什么区别?

Gin*_*pin 11

它允许您运行black(或随后出现的任何命令run)安装在虚拟环境中的命令,而无需先激活虚拟环境

\n

相关注释在poetry run文档中(强调我的):

\n
\n

该命令在 project\xe2\x80\x99s virtualenv 内run执行给定的命令。

\n
\n

假设您有一个带有main.py 的诗歌演示项目,并且安装了:black

\n
poetry-demo$ ls\nREADME.rst     main.py        poetry.lock    poetry_demo    pyproject.toml tests\n\npoetry-demo$ poetry add black\nThe following packages are already present in the pyproject.toml and will be skipped:\n\n  \xe2\x80\xa2 black\n\n...\n
Run Code Online (Sandbox Code Playgroud)\n

如果您不首先激活您的虚拟环境(即poetry shell)并且您的系统上没有black安装任何其他位置,那么简单的操作black file.py就会失败:

\n
poetry-demo$ which black\n\npoetry-demo$ black main.py\n-bash: black: command not found\n
Run Code Online (Sandbox Code Playgroud)\n

但是,使用poetry run,即使不激活虚拟环境,您也可以运行black

\n
poetry-demo$ poetry run black main.py\nAll done! \xe2\x9c\xa8  \xe2\x9c\xa8\n1 file left unchanged.\n
Run Code Online (Sandbox Code Playgroud)\n

您感到困惑的根源可能是因为您已经激活了虚拟环境,所以实际上没有什么区别:

\n
poetry-demo$ poetry shell\nSpawning shell within /path/to/virtualenvs/poetry-demo-hCA44HQ0-py3.8\npoetry-demo$ . /path/to/virtualenvs/poetry-demo-hCA44HQ0-py3.8/bin/activate\n\n(poetry-demo-hCA44HQ0-py3.8) poetry-demo$ black main.py\nAll done! \xe2\x9c\xa8  \xe2\x9c\xa8\n1 file left unchanged.\n\n(poetry-demo-hCA44HQ0-py3.8) poetry-demo$ poetry run black main.py\nAll done! \xe2\x9c\xa8  \xe2\x9c\xa8\n1 file left unchanged.\n
Run Code Online (Sandbox Code Playgroud)\n