我有一個關於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定義了每個命令。
bukzor嗨, 謝謝您的回答。我認爲這雖然不行。 Virtualenvwrapper.sh是一個定義作爲命令的新bash函數的腳本,所以我不能僅僅添加例如命令「workon」到env,但我必須提供完整的函數。 – guillemch
如果你想要你的bash函數,爲什麼不寫一個bash腳本? –
在bash中,至少可以使用'export -f myfunc'將函數導出到環境中。 – bukzor