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脚本的步骤。
我错过了什么?这是正确的用例吗?
答案 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')