如何在调用前不激活虚拟环境的情况下从多个虚拟环境运行脚本?

时间:2019-06-11 09:51:30

标签: python virtualenv packaging package-managers

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

这三个命令(软件包cli,业务流程工具cli和python解释器)都将被用户调用,并且必须随心所欲地使用,而无需更改激活/工作目录或施加其他魔术。另外,我不想涉足cli脚本的内容,因此出于这个问题的目的,请让它们只读/运行。

从我的角度来看,有几种方法可以实现所需的行为。

A 。添加到我的.bash_profile脚本行

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

此解决方案要求我要以这种方式使用的每个工具都需要手动操作。同样,该解决方案也遭受命名空间重叠的问题。我要以此方式使用的每个新cli的bin目录都应仔细放置在venv_throwaway/bin之后,至少是因为否则new_cli/bin/python将在我的venv_throwaway/bin/python解释器之前。此外,如果某些其他CLI具有不兼容的通用依赖关系,那么我就必须强行正确放置路径,这是一个负担。

B 。我想用这种方式将每个工具的符号链接可执行到/usr/local/bin。除了需要手动操作外,此解决方案几乎是完美的。

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

C 。制作我自己的python软件包 my_awesome_cli_installer ,该软件包可以自动执行 B 中的手动步骤。除了遭受NIH问题的困扰外,几乎是完美的。

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

0 个答案:

没有答案