我有一个关于 python 和 linux 中的环境变量的问题。我在这里阅读了很多问题/答案,但没有一个完全符合我的情况。它是这样的:
我在 python 中有一个脚本,可以自动安装 virtualenvwrapper 和其他一些东西。它在使用模块 sysem 的 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_call 并且在每一个中我都必须获取 .bashrc 因为否则我会在“干净”的环境中执行 check_call 并且我无法继续。
所以我的问题是:有什么方法可以像我离开脚本、获取 .bashrc 并再次输入脚本一样更新一般环境?
非常感谢!
注意:传递给 check_call 的 env 参数只有几个通用变量,我不能将 virtualenvwrapper 定义的每个命令都添加到这个 env 中。