2012-09-19 2 views
3

리눅스에서 파이썬과 환경 변수에 관한 질문이 있습니다. 나는 여기서 많은 질문/대답을 읽었지 만 아무도 정확하게 나의 경우는 아니다. 여기에 간다 :파이썬 스크립트 내 환경 변경하기

나는 virtualenvwrapper와 몇 가지 다른 것들을 자동으로 설치하는 스크립트를 파이썬으로 가지고있다. 모듈 sysem을 사용하는 HPC 클러스터에서 실행 중입니다. 설치 단계 중 하나는 새로운 환경 변수와 명령을 사용할 수 있도록 일부 구성 파일 (~/.bashrc 및 ~/.virtualenvs/postactivate)을 수정하는 것입니다.

특히, ~/opt/mypython/bin/virtualenvwrapper.sh에 소스를 추가하는 .bashrc를 수정합니다.이 명령은 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

안녕하세요, 답변 해 주셔서 감사합니다. 나는 그것이 작동하지 않겠지 만 생각합니다. Virtualenvwrapper.sh는 명령으로 작동하는 새 bash 함수를 정의하는 스크립트이므로 env에 "workon"명령을 추가 할 수는 없지만 전체 함수를 소스 화해야합니다. – guillemch

+0

bash 함수를 원한다면 왜 bash 스크립트를 작성하지 않겠습니까? –

+0

bash에서 적어도 함수는'export -f myfunc'를 사용하여 환경에 내보낼 수 있습니다. – bukzor

관련 문제