在Python脚本中创建virtualenv并在该环境中运行其余部分

时间:2015-08-10 13:05:37

标签: python virtualenv

Based on this link我在Python脚本中创建并激活了一个虚拟环境,但我想要的是在激活virtualenv之后,其他代码应该在env中运行,安装几个项目然后进行处理。

代码:

#!/usr/bin/python
import commands
import os
import time
import datetime
import sys
import json
import requests

out = commands.getoutput("wget <url>/s.sh")
new = commands.getoutput("chmod 755 s.sh")


env = "virtualenv " + "test"    

#checking if env present if not create and activate it
try:
    l=commands.getoutput('/bin/bash --rcfile s.sh')
except:
    print env + " not present" 
    m = commands.getoutput(env)
    print env + " not present so creating" 
    os.system('/bin/bash --rcfile s.sh')


v = commands.getoutput("which python")
print v + " python to be used"
v = commands.getoutput("pip install wget")

s.sh文件代码: -

#!/bin/sh
. test/bin/activate

基本上没有shell脚本来创建virtualenv,激活它,并运行一些我想要使用python脚本的步骤。

我错过了什么?这是正确的用例吗?

1 个答案:

答案 0 :(得分:1)

我发现虚拟环境激活的东西都有点像脚本中的辛苦工作。在你的情况下,你是用python而不是shell来做的,但是我猜它是相同的基本主体(之前没有见过commands - 它们是否都运行在同一个子进程中)?

相反,我通常只使用venv中可执行文件的完整路径。它更加明确,但是再一次,这就是python方式:)

您必须注意的一件事是权限。

sudo -u whatever_user /path_to_myvenv/bin/pip install -r /some_path/requirements.txt

不确定这是否有用,但我希望直接在venv中调用二进制文件。

编辑只是玩commands - 每个都是独立的(所以这可能是你问题的根本原因)

commands.getoutput('pwd')  # /somepath
commands.getoutput('cd /tmp')
commands.getoutput('pwd')  # still /somepath

我希望做类似的事情:

commands.getoutput('virtualenv test')
commands.getoutput('test/bin/pip install wget')