从 Python 脚本中激活 virtualenv

问题描述 投票:0回答:1

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

测试.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 会在激活文件中引发语法错误。

python python-3.x ubuntu syntax-error virtualenv
1个回答
1
投票

activate的第1st行(请注意,VEnv安装在Win上,但这应该不是问题):

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

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

[Python.Docs]:内置函数 - 编译(源、文件名、模式、flags=0、dont_inherit=False、optimize=-1) 另一方面,可与 Python 源代码一起使用。

因此,为了执行该文件,您需要使用其他方式,例如[Python.Docs]:子流程 - 子流程管理
您可以检查我是如何使用它的:[SO]:如何在 Cygwin 中使用 Python 有效地将 POSIX 路径转换为 Windows 路径? (@CristiFati 的回答).

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

您应该采用推荐的方式([PyPA]:Virtualenv - 用户指南),即(来自bash):

source /path/to/Django/ENV/bin/activate
python your_project_startup_script.py  # (as I recall, it's manage.py)
© www.soinside.com 2019 - 2024. All rights reserved.