2013-08-31 1 views
0

Python 3.3 및 Qt4.8을 사용하여 PyQt 응용 프로그램을 작성했으며 QProcess를 시작합니다. 새로 시작된 하위 프로세스는 python 스크립트를 실행하려고 시도하며이 스크립트는 3.3 디렉토리 (시스템의 기본 python은 2.7 임)에서 python 모듈을 검색하기 때문에 실패합니다.다른 Python 버전으로 설정된 PYTHONPATH를 사용하여 QProcess를 시작하십시오.

나는 자식 프로세스가 부모 프로세스로부터 환경 (그러므로 PYTHONPATH)을 상속 받기 때문에 파이썬 3.3 디렉토리에서 파이썬 모듈을 찾고 있다고 생각한다. QProcess.setProcessEnvironment를 사용하여 PYTHONPATH를 변경할 수 있지만 파이썬 3.3을 사용하는 PyQt 응용 프로그램에서 2.7에 대한 PYTHONPATH 값을 얻는 방법은 무엇입니까?

편집 : 아래의 답변은 Viktor에서 저에게 효과적입니다. 나는 환경에서 PYTHONPATH와 PYTHONHOME을 제거해야했습니다. 다른 런처가 내 응용 프로그램의 로컬 디렉토리 (나는 py2app를 사용하여 app/package를 만들었습니다)에서 사용되고 있었기 때문에 PYTHONHOME을 제거해야했습니다. 당신은 그냥 환경에서 현재 하나를 제거 기본 PYTHONPATH의에 서브 프로세스 파이썬 그냥 되돌리려면

systemEnvironment = QtCore.QProcessEnvironment.systemEnvironment() 
systemEnvironment.remove('PYTHONPATH') 
systemEnvironment.remove('PYTHONHOME') 
process.setProcessEnvironment(systemEnvironment) 
+0

코드의 문제 일부를 추가합니다 (env.append 부분을 생략) : 아래 코드는 너는 그 질문을해야한다. –

+0

process = QProcess (self); process.start ("perl abc.pl"); 이 abc.pl in trun은 다른 python 스크립트를 호출하며 2.7 환경 (현재 스크립트는 python 3.3에서 실행 중입니다)을 검색하도록 PYTHONPATH를 설정하여 호출해야합니다. – Gaurav

답변

1
# Get the current environment end filter out the old 
# PYTHONPATH variable if exists in the environment 
env = [env for env in QtCore.QProcess.systemEnvironment() 
     if not env.startswith('PYTHONPATH=')] 
# Add your PYTHONPATH 
env.append('PYTHONPATH=path_to_where_you_want') 
# Create a process, set the environment and run the script 
p = QtCore.QProcess() 
p.setEnvironment(env) 
p.start('perl abc.pl') 

+0

기본 파이썬 환경 (파이썬 인터프리터에서 터미널에서 sys.path를 사용하는 경로)에 대한 경로를 찾는 방법은 무엇입니까? – Gaurav

+0

환경 변수에서 PYTHONPATH를 제거하기 만하면 Python이 기본값으로 폴백합니다. –

+0

답장을 보내 주셔서 감사합니다. 나는 그것을 시도 할 것이다. – Gaurav

관련 문제