我被迫拥有两个不兼容的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 )?