从Python脚本中激活virtualenv

时间:2019-01-29 11:54:13

标签: python python-3.x ubuntu syntax-error virtualenv

我正在尝试使用以下python代码激活我的virtualenv(已经存在):

Test.py

import os, sys
filename = "activate"
exec(compile(open(filename, "rb").read(), filename, 'exec'), globals, locals)
print(os.system('pwd'))

if hasattr(sys, 'real_prefix'):
    print('success')
else:
    print('failed')

然后我通过终端运行此脚本:

python Test.py

然后会产生此错误:

Traceback (most recent call last): File "activate_this.py", line 3, in <module> exec(compile(open(filename, "rb").read(), filename, 'exec'), globals, locals) File "activate", line 4 deactivate () { ^ SyntaxError: invalid syntax


我可以先执行cd env/bin然后执行source activate

来成功激活virtualenv

TLDR

从python脚本激活virtualenv会从激活文件中引发语法错误。

1 个答案:

答案 0 :(得分:1)

激活的第1条 st 行(请注意 Win 上已安装 VEnv ,但这没问题)

# This file must be used with "source bin/activate" *from bash* 

那个,下面几行应该告诉您 activate 是一个( Bourne shell 文件。

另一方面,

[Python 3]: compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) Python 源代码一起使用。

因此,要执行文件,您需要使用其他方式,例如[Python 3]: subprocess - Subprocess management
您可以检查我的使用方式:[SO]: How to effectively convert a POSIX path to Windows path with Python in Cygwin? (@CristiFati's answer)

但是,我真的不明白这样做的目的,您可能误解了同事的建议。
另请注意,即使您确实设法做到这一点,所有环境变量也只会在调用过程中设置,因此,它几乎是不可用的(好吧,除非您还执行脚本)也从那里)。

您应该采用推荐的方式([PyPA]: Virtualenv - User Guide),也就是(来自 bash ):

source /path/to/Django/ENV/bin/activate
python your_project_startup_script.py  # (as I recall, it's manage.py)