它允许您运行安装在虚拟环境中的black(或run 之后的任何命令)无需先激活您的虚拟环境。
相关说明在poetry run docs(重点是我的):
run 命令在项目的 virtualenv 中执行给定的命令。
假设您有一个带有 main.py 的 poetry-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.