首页 > 解决方案 > 如何在调用前不激活虚拟环境的情况下从多个虚拟环境运行脚本?

问题描述

我被迫拥有两个不兼容的python包版本:带有漂亮cli的更新版本和带有第三方编排工具使用的python API的旧版本,后者也是带有cli本身的python包。因此我需要有两个独立的虚拟环境。另外我想从我当前的一次性虚拟环境(第三个)运行 python 解释器。

所有三个命令(包 cli、编排工具 cli 和 python 解释器)都将从用户调用,并且必须在没有激活/工作目录更改或其他魔法咒语的情况下随心所欲地可用。此外,我不想涉足 cli 脚本的内容,所以为了这个问题的目的,让它们只读/运行。

从我的角度来看,有几个选项可以实现所需的行为。

一个。添加到我的.bash_profile脚本行

export PATH=venv_throwaway/bin:venv_cli/bin:venv_orchestration_tool/bin:$PATH

此解决方案需要对我想以这种方式使用的每个工具进行手动步骤。此解决方案还存在名称空间重叠问题。bin我想以这种方式使用的每个新 cli 的目录都应该小心放置venv_throwaway/bin在至少之后,因为否则new_cli/bin/python会在我的venv_throwaway/bin/python解释器之前。此外,如果其他一些 CLI 具有不兼容的公共依赖项,那么我必须强制执行正确的路径放置顺序,这是一种负担。

/usr/local/bin对于我想以这种方式使用的每个工具的符号链接可执行文件。这个解决方案几乎是完美的,除了它需要手动步骤。

乙'。使用可执行文件的完整 venv 路径调用 cli(例如~/.virtualenvs/awscli/bin/aws)。看起来几乎像选项B,特别是如果我将使用别名来缩短 venv 路径。

C. _ 制作我自己的 python 包my_awesome_cli_installer ,它可以自动执行B中的手动步骤。几乎完美,除了它受到NIH问题的影响。

还有其他方法可以实现所需的行为吗?我应该使用什么选项(ABC)?

标签: pythonvirtualenvpackagingpackage-managers

解决方案


推荐阅读