我可以使用单个python脚本来创建virtualenv并安装requirements.txt吗?

时间:2018-02-28 22:54:45

标签: python subprocess virtualenv

我正在尝试创建一个脚本,如果尚未创建virtualenv,然后在其中安装requirements.txt。

我无法调用普通的source / env / bin / activate并激活它,然后使用pip来安装requirements.txt。有没有办法激活virtualenv,然后从单个python脚本安装我的需求?

我的代码:

    if not os.path.exists(env_path):
        call(['virtualenv', env_path])

    else:
        print "INFO: %s exists." %(env_path)



    try:
        call(['source', os.path.join(env_path, 'bin', 'activate')])

    except Exception as e:
        print e

错误是"没有这样的文件目录"

由于

2 个答案:

答案 0 :(得分:3)

source是一个shell内置命令,而不是程序。它不能也不应该用subprocess执行。您可以通过在当前进程中执行activate_this.py来激活新的虚拟环境:

if not os.path.exists(env_path):
    call(['virtualenv', env_path])
    activate_this = os.path.join(env_path, 'bin', 'activate_this.py')
    execfile(activate_this, dict(__file__=activate_this))

else:
    print "INFO: %s exists." %(env_path)

答案 1 :(得分:1)

source.命令使当前shell在其环境中执行给定的源文件。您需要一个shell才能使用它。这可能不像你喜欢的那样干净,因为它使用字符串而不是列表来表示命令,但它应该可以工作。

import subprocess

subprocess.check_call( [ 'virtualenv', 'env-dir' ] )

subprocess.check_call(
    ' . env-dir/bin/activate && pip install python-dateutil ',
    shell = True
)