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

7

基于诗歌文档:

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

建议使用black的方式是:

poetry run black myscript.py

然而,如果我只是使用

,我没有注意到任何行为上的差异。

black myscript.py

这两种方法有什么区别?
1个回答

10

它允许你在不需要先激活虚拟环境的情况下运行安装在其中的black(或run后面的任何命令)。

相关提示在poetry run文档中(我强调):

run命令在项目的虚拟环境中执行给定的命令。

假设你有一个包含main.pypoetry-demo项目,并且你已经安装了black

poetry-demo$ ls
README.rst     main.py        poetry.lock    poetry_demo    pyproject.toml tests

poetry-demo$ poetry add black
The following packages are already present in the pyproject.toml and will be skipped:

  • black

...

如果你没有先激活你的虚拟环境(比如使用 poetry shell 命令),而且 如果你的系统中没有安装 black,那么简单地执行 black file.py 就会失败。
poetry-demo$ which black

poetry-demo$ black main.py
-bash: black: command not found

有了poetry run,即使不激活虚拟环境,您也可以运行black

poetry-demo$ poetry run black main.py
All done! ✨  ✨
1 file left unchanged.

你困惑的原因可能是你已经激活了虚拟环境,所以实际上没有什么区别:
poetry-demo$ poetry shell
Spawning shell within /path/to/virtualenvs/poetry-demo-hCA44HQ0-py3.8
poetry-demo$ . /path/to/virtualenvs/poetry-demo-hCA44HQ0-py3.8/bin/activate

(poetry-demo-hCA44HQ0-py3.8) poetry-demo$ black main.py
All done! ✨  ✨
1 file left unchanged.

(poetry-demo-hCA44HQ0-py3.8) poetry-demo$ poetry run black main.py
All done! ✨  ✨
1 file left unchanged.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接