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