【问题标题】:Can I use a single python script to create a virtualenv and install requirements.txt?我可以使用单个 python 脚本来创建 virtualenv 并安装 requirements.txt 吗?
【发布时间】:2018-10-13 07:11:24
【问题描述】:

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

我无法调用普通源/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

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

谢谢

【问题讨论】:

    标签: python subprocess virtualenv


    【解决方案1】:

    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)
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多