简而言之:
我如何保证我的virtualenv被使用,而不是原生env?
其他答案的问题:
我已经看到这个问题的答案很多,但答案很简洁,基本上只涉及虚拟环境的“即插即用”场景。
我的场景:
让我们假设一个虚拟python环境(myEnv)位于一个足够复杂的文件夹中,而运行它的机器则足够复杂(targetEnv)。假设virtualenv(myEnv)中有很多自定义项,并且该virtualenv中的evn变量以我们不知道的方式进行了修改(例如:通过.pth文件)。
通常我看到的答案是,我们应该在windows cmd提示符中执行以下操作:
cd /d C:\Program Files\MyApp\myEnv\Scripts\ && activate
cd /d C:\Program Files\MyApp\ && python Main.py
现在如果你调查一下。批处理或激活。ps1,你会看到他们所做的只是假设你已经建立了一个
PYTHONHOME
变量,然后设置新的env变量
_OLD_VIRTUAL_PATH
,
_OLD_VIRTUAL_PYTHONHOME
,
VIRTUAL_ENV
,并暂时移除
蟒蛇窝
变量
然而,这仍然不能告诉shell如何找到类似的东西
python.exe
.当我像上面建议的代码那样运行时,我得到了一个python环境,它不包含shell中的任何sys路径,如果显式调用,这些路径将被激活:
cd/d C:\Program Files\MyApp\myEnv\Scripts\&&pythonexe
然后在生成的shell中,我调用:
导入系统
系统。路径
这是因为
activate
确实更改了环境变量的名称,所以调用:
cd/d C:\Program Files\MyApp\&&python Main。py
找到
pythonexe
在
_老蟒蛇之家
(这和
蟒蛇窝
变量是)而不是
虚拟环境
(这等于
C:\Program Files\MyApp\myEnv\
)小路。我想这意味着可以发现带有的“VIRTUAL_ENV”路径中的模块,但不会搜索添加到虚拟环境中的路径,因为不会调用myEnv shell的可执行文件。
有人知道怎么解决这个问题吗?
编辑1
正如我在评论中指出的,我需要澄清。这个问题中提到的pth文件只包含相对路径,而不包含绝对路径。在任何实际的运输或部署情况下,让我们假设我们不知道这个虚拟环境安装在哪里,因此必须依赖于使用相对于环境变量的路径。