2012-09-19 93 views
3

我有一個關於python和Linux環境變量的問題。我一直在閱讀很多問題/答案,但沒有人確切地說我的情況。這裏有雲:更改python腳本中的環境

我在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_calls,並且在每一箇中我都必須提供.bashrc,否則我會執行帶有「乾淨」環境的check_call,而且我無法前進。

所以我的問題是:有沒有什麼辦法來更新一般環境相同的方式,如果我離開劇本,採購的.bashrc,然後再次輸入腳本?

非常感謝!

注:傳遞給check_call env參數只有幾個普通的變量,我不能添加到這個ENV是virtualenvwrapper定義了每個命令。

回答

0

正如您所指出的,這些命令通常只是操縱環境。我將在此設置過程中運行env作爲最終命令,並將其參數解析爲字典。這個字典可以被添加到您已有的env變量中,或者如果您想使其成爲永久的全局變量,您可以os.environ.update(virtualenv_env)

+0

bukzor嗨, 謝謝您的回答。我認爲這雖然不行。 Virtualenvwrapper.sh是一個定義作爲命令的新bash函數的腳本,所以我不能僅僅添加例如命令「workon」到env,但我必須提供完整的函數。 – guillemch

+0

如果你想要你的bash函數,爲什麼不寫一個bash腳本? –

+0

在bash中,至少可以使用'export -f myfunc'將函數導出到環境中。 – bukzor