【问题标题】:What is the difference between `poetry run black myscript.py` and `black myscript.py`?`poetry run black myscript.py` 和 `black myscript.py` 有什么区别?
【发布时间】:2021-10-27 12:01:28
【问题描述】:

基于poetry docs:

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

black 的建议使用方式是:

poetry run black myscript.py

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

black myscript.py

这两种方法有什么区别?

【问题讨论】:

    标签: python python-poetry python-black


    【解决方案1】:

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

    相关说明在poetry run docs(重点是我的):

    run 命令在项目的 virtualenv 中执行给定的命令。

    假设您有一个带有 ma​​in.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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      • 2012-01-24
      • 2017-03-29
      • 2016-04-19
      相关资源
      最近更新 更多