리눅스에서 파이썬과 환경 변수에 관한 질문이 있습니다. 나는 여기서 많은 질문/대답을 읽었지 만 아무도 정확하게 나의 경우는 아니다. 여기에 간다 :파이썬 스크립트 내 환경 변경하기
나는 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가 정의하는 모든 명령을 추가 할 수 없습니다.
안녕하세요, 답변 해 주셔서 감사합니다. 나는 그것이 작동하지 않겠지 만 생각합니다. Virtualenvwrapper.sh는 명령으로 작동하는 새 bash 함수를 정의하는 스크립트이므로 env에 "workon"명령을 추가 할 수는 없지만 전체 함수를 소스 화해야합니다. – guillemch
bash 함수를 원한다면 왜 bash 스크립트를 작성하지 않겠습니까? –
bash에서 적어도 함수는'export -f myfunc'를 사용하여 환경에 내보낼 수 있습니다. – bukzor