poetry run black myscript.py与直接运行black myscript.py有什么区别?
两种black运行方式的核心区别
poetry run black:严格调用当前poetry项目绑定的虚拟环境内安装的black版本,执行时会完全使用该虚拟环境的Python解释器、依赖配置,和系统全局环境、其他项目的虚拟环境完全隔离。不管你当前shell是否激活了对应虚拟环境,只要在poetry项目根目录执行该命令,调用的都是当前项目专属的black实例,不会出现环境串用的问题。- 直接执行
black myscript.py:调用的是当前shell的PATH环境变量中优先级最高的black可执行文件,可能是系统全局安装的版本,可能是其他已激活虚拟环境内的版本,也可能刚好是当前poetry项目虚拟环境内的版本。你没有观察到运行差异,大概率是当前shell已经激活了项目对应的poetry虚拟环境,或是虚拟环境的可执行文件目录已经被加入到PATH的最高优先级,两种方式实际调用的是同一个black实例。
典型差异场景示例:如果项目的pyproject.toml中固定了black版本为22.3.0,而系统全局安装的black版本为24.1.0,在未激活项目虚拟环境的情况下直接执行
black会使用24.1.0版本,可能出现和项目要求不一致的格式化规则,而poetry run black始终会调用项目指定的22.3.0版本,多人协作场景下可以避免工具版本差异导致的格式冲突。
内容的提问来源于stack exchange,提问作者zabop
相关产品推荐
相关产品推荐

