有没有一种方法可以在python解释器中停用虚拟环境?即类似于deactivate_this的功能。

2024-06-03 13:06:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个脚本(这是openshift应用程序的wsgi脚本的开始)。此脚本使用python系统环境激活virtualenv。在

#!/usr/bin/python
import os

virtenv = os.environ['OPENSHIFT_PYTHON_DIR'] + '/virtenv/'
virtualenv = os.path.join(virtenv, 'bin/activate_this.py')
try:
    execfile(virtualenv, dict(__file__=virtualenv))
except IOError:
    pass

相反呢?i、 e:有没有类似的方法来做“停用这个”?(在我创建的任何virtualenvs中似乎都不存在这样的文件)

这意味着:我不想重新发明轮子。我已经准备好了。在


Tags: import脚本应用程序wsgibin环境virtualenvos
2条回答

我相信简短的回答是否定的

一般的答案是“除非您在执行activate之前保存了环境的状态_这个.py". 在

也许达到你想要的效果的一种方法是将你的应用程序中需要在venv中运行的部分与那些不需要运行的部分分开。然后使用一个子进程来激活venv并运行任何你想要的,当子进程终止时,你的原始进程(在原始环境中)可以恢复。在

注:这篇文章(How to leave/exit/deactivate a python virtualenv?)建议激活可以提供一个shell函数来放回所有东西。您需要检查您的activate_this.py脚本是否提供了类似的内容,尽管听起来您已经检查过了。在

这是对汤姆道尔顿给出的答案的补充。尽管没有自动提供的方法来实现这一点,但是activate_this脚本提供了一些方法。在

首先,要记住这句话:

execfile(virtualenv, dict(__file__=virtualenv))

调用函数时没有传递全局变量的字典或局部变量的字典。这意味着执行上下文将是当前的全局变量(即调用行中的全局变量)和局部变量对象。这样的行将改变我们当前拥有的变量,从而覆盖调用环境See here for docs about。在

这样,由于变量被重写,activate_this给了我们一些变量,比如:

^{pr2}$

因此,如果需要手动停用,我们可以恢复这些变量:

^{3}$

相关问题 更多 >