改变python脚本中的环境

时间:2012-09-19 15:47:10

标签: python environment-variables

我对linux中的python和环境变量有疑问。我在这里一直在阅读很多问题/答案,但没有人是我的理由。在这里:

我在python中有一个自动安装virtualenvwrapper和其他几个东西的脚本。它在使用模块系统的HPC群集上运行。安装的其中一个步骤包括修改一些配置文件(〜/ .bashrc和〜/ .virtualenvs / postactivate),以便可以使用新的环境变量和命令。

具体来说,我修改.bashrc将一个源添加到〜/ opt / mypython / bin / virtualenvwrapper.sh,它定义了许多管理virtualenv的有用命令。在同一个脚本中我想创建一个虚拟环境,所以,直到现在,我正在做:

install_and_create_virtualenv ='''
    easy_install --prefix=~/opt/mypython pip &&
    pip install virtualenvwrapper --install-option="--prefix=~/opt/mypython" &&
    . ~/.bashrc &&
    module unload python &&
    mkvirtualenv --python=/sw/comp/python/2.7_kalkyl/bin/python master
    '''

check_call(install_and_create_virtualenv, shell=True, env=env)

正如你所看到的,我做了一个。 〜/ .bashrc加入check_call。这来源.bashrc(因此virtualenvwrapper.sh)然后我可以调用mkvirtualenv。否则mkvirtualenv将无法使用,因为我刚安装它。

这不会是问题如果我只需要做一次。但事实是,我做了几个check_calls,并且在每一个我都必须提供.bashrc,否则我执行check_call与" clean"环境,我不能前进。

所以我的问题是:有没有办法更新一般环境,就像我离开脚本,采购.bashrc并再次输入脚本一样?

非常感谢!

注意:传递给check_call的env参数只有一些常规变量,我不能在virtvalenvwrapper定义的每个命令中添加这个env。

1 个答案:

答案 0 :(得分:0)

正如您所指出的,这些命令通常只是操纵环境。我会在此安装过程中运行env作为最终命令,并将其参数解析为dict。此dict可以添加到您已有的env变量中,或者如果您想将其设为永久性和全局变量,则可以os.environ.update(virtualenv_env)