python - 如何在调用前不激活虚拟环境的情况下从多个虚拟环境运行脚本?
问题描述
我被迫拥有两个不兼容的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问题的影响。
还有其他方法可以实现所需的行为吗?我应该使用什么选项(A、B或C)?
解决方案
推荐阅读
- sulu - 如何通过 twig 模板或 twig 扩展中的 url 获取页面内容?
- google-app-engine - 保护服务之间的通信
- python - 如何在 Shapely 中获取 LineString 的端点
- python - 查找单词的子集 - python itertools pandas
- typescript - 类型为字符串时引用 SomeInterface 中的字段 | 打字稿中的一些接口
- c - 在 C 中存储来自 netsh 的 DNS 服务器
- git - GIT如何在文件中注入提交信息,以便在推送到远程期间/之后?
- json - 我想将 json 文件列表转换为仅具有特定属性的 csv
- html - bootstrap - 在屏幕尺寸变化时将文本从一个 div 移动到另一个
- excel - 从函数返回的 VBA 对象不可用