简单地输入:
我如何保证使用我的virtualenv而不使用本机env?
其他答案有问题: 我已经看到了这个问题的答案,但是答案很简洁,基本上只涉及虚拟环境的“即插即用”场景。
我的Scenerio: 让我们假设一个虚拟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
现在,如果您查看activate.batch或Activate.ps1,您会发现它们所做的只是假设您已经为本地python环境设置了PYTHONHOME
变量,然后设置了新的环境变量{ {1}},_OLD_VIRTUAL_PATH
,_OLD_VIRTUAL_PYTHONHOME
,并暂时删除VIRTUAL_ENV
变量。
但是,这仍然没有告诉Shell如何找到类似PYTHONHOME
之类的东西。当我像上面建议的代码那样运行时,我得到一个python环境,该环境在外壳中不包含任何系统路径,如果显式调用该路径,则会被激活:
cd / d C:\ Program Files \ MyApp \ myEnv \ Scripts \ && python.exe
然后在生成的shell中调用: 导入系统 sys.path
之所以这样做,是因为所有python.exe
所做的都是更改环境变量的名称,因此仅调用以下命令仍然完全合乎逻辑:
cd / d C:\ Program Files \ MyApp \ && python Main.py
在activate
(与python.exe
变量相同)中找到_OLD_VIRTUAL_PYTHONHOME
,而不是PYTHONHOME
(等于VIRTUAL_ENV
)路径。我想这意味着可以发现'VIRTUAL_ENV'路径中的模块,但是将永远不会搜索添加到虚拟环境的路径,因为不会调用myEnv shell的可执行文件。
有人知道如何解决这个问题吗?
编辑1
如评论中所述,我需要澄清。问题中提到的.pth文件仅包含相对路径,而不包含绝对路径。就像在任何实际的运输或部署情况下一样,假设我们不知道该虚拟环境的安装位置,因此必须依靠使用相对于环境变量的路径。
答案 0 :(得分:-1)