首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Shell命令写入VirtualEnv?

将Shell命令写入VirtualEnv?
EN

Stack Overflow用户
提问于 2015-10-28 16:41:29
回答 2查看 489关注 0票数 1

有什么方法可以在虚拟环境激活后将命令写到虚拟环境中吗?例如,假设我有一个Python或Bash脚本,它可以做一些事情,比如

  1. 创造一个虚拟的人
  2. 激活它。
  3. 将命令执行到新创建的虚拟环境的shell中?

例如,我正在做这样的事情:

代码语言:javascript
复制
activate_this = subprocess.call("/bin/bash --rcfile " + "/home/" + os.getlogin() + "/mission-control/venv/bin/activate", shell=True)
        process = execfile(activate_this, dict(__file__=activate_this))
        process.communicate(subprocess.call(virtualenv.create_bootstrap_script(textwrap.dedent
            ("""
                import subprocess
                subprocess.call("pip install -r " + os.environ['VIRTUAL_ENV'] + "/requirements.txt", shell=True)
            """
            ))))

我想在激活环境之后安装requirements.txt文件,但是在创建虚拟环境之后,无法让子进程模块与shell通信。我认为这可能与我通过execfile创建一个新的虚拟环境有关,因此它正在创建一个新的过程。

另外,我知道shell=True是一个糟糕的实践,但是现在我并不关心非净化输入的可能性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-28 18:37:04

首先,感谢@Ryne Everett的帮助。因此,我通过放弃Python解决方案并创建一个Bash文件来解决这个问题,我在Python脚本中的子进程中调用了这个文件。子进程调用执行Bash文件,该文件处理虚拟环境中的创建和执行。我不知道如何只用Python来解决这个问题。我相信有一个办法,但这似乎是一个更简单的解决办法。Bash脚本如下:

代码语言:javascript
复制
#!/bin/bash 

MISSION_CONTROL="$PWD"

if [ ! -d "$MISSION_CONTROL/venv" ]; then 
    virtualenv $MISSION_CONTROL/venv --no-site-packages
    echo "Welcome to Mission Control..."
    /bin/bash --rcfile $MISSION_CONTROL/venv/bin/activate
fi 

if [ -d "$MISSION_CONTROL/venv" ]; then 
    pip install -r $MISSION_CONTROL/requirements.txt 
fi

编辑:这对那些试图做类似事情的人也很有用:How to source virtualenv activate in a Bash script

票数 0
EN

Stack Overflow用户

发布于 2015-10-28 17:08:59

代码语言:javascript
复制
. "$VIRTUAL_ENV/bin/activate"
pip install -r "$VIRTUAL_ENV/requirements.txt"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33396725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档