2011-09-05 16 views
1

좋아, 그래서 다음과 같은 상황이 있습니다. 대상 PC에서 PYTHONPATH를 동적으로 편집해야합니다. 파이썬에서sh 스크립트는 python 스크립트와 동일합니다.

trunk 
    bin 
     start_script 
    dependencies 
     dependencies 

내가 start_script에서 할 수있는 : 이제 프로젝트의 구조는

root_path = os.path.split(os.path.dirname(os.path.abspath(__file__)))[0] 
dependencies_root = os.path.join(root_path, 'dependencies') 
from sys import path 
path.extend([root_path, dependencies_root]) 

이 트릭을 할 것입니다하지만 난 process.Popen과 새로운 파이썬 프로세스를 시작하는 데 필요한 sys.path에 대한 변경 사항은 사라졌습니다.

sh 스크립트가 여기에서 더 잘할 것이라고 생각 했었습니다. 불행히도 저는 여기서 완전히 멍청한 사람입니다. 진행 방법을 모릅니다. 위의 한에서 쉬 스크립트는 그래서 것들에게 기본적으로 파이썬을 수행해야합니다

[1] Get the absolute path of the directory the script is located 
[2] Get the parent of that folder (say parent_path) 
[3] export PYTHONPATH=$PYTHONPATH:parent_path 
[4] python start_script.py 

그래서 기본적으로 처음 두 단계는 내가 도움이 필요한 사람들이다. 또한 파이썬의 sys.path를 변경하는 방법이 subprocess.Popen으로 열린 서브 프로세스에서 지속된다면 알려주십시오.

+3

'os.environ' dict를 사용하여 start_script에서'sys.path'를 업데이트하는 동시에'PYTHONPATH' 환경 변수를 업데이트 할 수 있습니다. – MatToufoutu

+0

대상 플랫폼이 무엇입니까? 예를 들어 리눅스에서는 사람들이'realpath '를 갖기를 기대할 수 있지만 OSX에서는 표준이 아닙니다. Que Larry Wall은 "휴대용 쉘 스크립트를 작성하는 것보다 휴대용 쉘을 작성하는 것이 더 쉽습니다"라고 말합니다. – tripleee

+0

@MatToufoutu 답변입니다! 답변하고 투표하도록하겠습니다! –

답변

4

당신은 당신이 start_script에서 sys.path 업데이트 같은 순간에 PYTHONPATH 환경 변수를 업데이트 할 수 있습니다 (더 복잡한 설치, 등 휴대 휴식) os.environ dict를 사용하십시오.

0

env 인수를 subprocess.Popen으로 사용하지 않는 이유는 무엇입니까? ENV가 없음이되지 않는 경우

class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0) 

, 그것은 새로운 프로세스의 환경 변수를 정의하는 매핑해야합니다; 이것들은 현재의 프로세스 환경을 상속하는 대신에 사용됩니다. 이것은 디폴트의 동작입니다.

아니면 그냥 단순히 multiprocessing 모듈을 사용할 수있는 파이썬 프로세스를 시작합니다. 문서에서

예 :

from multiprocessing import Process 

def f(name): 
    print 'hello', name 

if __name__ == '__main__': 
    p = Process(target=f, args=('bob',)) 
    p.start() 
    p.join() 
+0

문제는 하위 프로세스였습니다. 하위 프로세스로 시작됩니다.Popen ([ 'python', '-m', MODULE_TO_START]) – Bogdan

+0

'start_script.py'에 대한 래퍼 스크립트를 작성 하시겠습니까? – tauran

1

나는 .pth 파일을 사용합니다. http://docs.python.org/install/index.html#inst-search-path

.pth 파일은 한 줄에 하나의 디렉토리 경로로 구성된 파일입니다. 나열된 디렉토리를 파이썬 경로에 삽입합니다. 모든 단점과 함께, 쉘 스크립트를 실행하는 것보다 더 좋을 수

,