繁体   English   中英

从 Python 脚本中激活 virtualenv

[英]Activating virtualenv from within Python script

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

测试文件

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 会从激活文件中抛出语法错误。

激活的非常第一行(注意VENV安装在赢了,但是这不应该是一个问题):

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

那,下面的几行应该告诉你activate是一个( Bourneshell文件。

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

因此,为了执行该文件,您需要使用其他方式,例如[Python 3]: subprocess - Subprocess management
您可以查看我是如何使用它的: [SO]:如何在 Cygwin 中使用 Python 有效地将 POSIX 路径转换为 ​​Windows 路径? (@CristiFati 的回答)

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

您应该采用推荐的方式( [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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM