3

Python と Linux の環境変数について質問があります。私はここで多くの質問/回答を読んできましたが、誰も私のケースではありません. ここに行きます:

virtualenvwrapper と他のいくつかのものを自動的にインストールする Python のスクリプトがあります。モジュールsysemを使用するHPCクラスターで実行されています。インストールの手順の 1 つは、いくつかの構成ファイル (~/.bashrc および ~/.virtualenvs/postactivate) を変更して、新しい環境変数とコマンドも使用できるようにすることです。

具体的には、virtualenv を管理するための多くの便利なコマンドを定義する ~/opt/mypython/bin/virtualenvwrapper.sh にソースを追加する .bashrc を変更します。同じスクリプト内で仮想環境を作成したいので、今までは次のことを行っていました。

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 を source する必要があります。そうしないと、「クリーンな」環境で check_call を実行し、先に進むことができなくなります。

私の質問は次のとおりです。スクリプトを離れて.bashrcを調達し、スクリプトを再度入力するのと同じ方法で、一般的な環境を更新する方法はありますか?

どうもありがとうございました!

注: check_call に渡される env パラメーターにはいくつかの一般変数しかありません。virtualenvwrapper が定義するすべてのコマンドをこの env に追加することはできません。

4

1 に答える 1

0

お気づきのように、これらのコマンドは通常、環境を操作するだけです。このセットアップ プロセスの最後のコマンドとして実行envし、その引数を dict に解析します。この dict は、env既に持っている変数に追加するか、永続的かつグローバルにしたい場合は、os.environ.update(virtualenv_env).

于 2012-09-19T15:57:19.437 に答える