2013-08-31 2 views
0

Я создал приложение PyQt с использованием python 3.3 и Qt4.8, и я начинаю с него QProcess. Вновь запущенный дочерний процесс пытается запустить скрипт python, и этот скрипт терпит неудачу, поскольку он ищет модули python в каталоге 3.3 (по умолчанию python в системе - 2,7).Запустите QProcess с настройкой PYTHONPATH на другую версию python

Я думаю, что он ищет модули python в каталоге python 3.3, потому что дочерний процесс наследует его среду (и, следовательно, PYTHONPATH) от родительского процесса. Я могу изменить PYTHONPATH с помощью QProcess.setProcessEnvironment, но как получить значение PYTHONPATH для версии 2.7 в приложении PyQt, использующем python 3.3?

EDIT: Ответ на этот вопрос Виктор работал для меня. Мне нужно было удалить PYTHONPATH и PYTHONHOME из окружающей среды. Мне нужно было удалить PYTHONHOME, потому что в противном случае пусковая установка использовалась из локального каталога моего приложения (я создал приложение/пакет с помощью py2app). Ниже приведен код:

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

Добавить проблемную часть кода вы должны ответить на этот вопрос. –

+0

process = QProcess (self); process.start ("perl abc.pl"); Этот abc.pl в trun вызывает еще один скрипт python, и мне нужно вызвать его с помощью набора PYTHONPATH для поиска среды 2.7 (текущий скрипт работает в python 3.3). – 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') 

Если вы хотите подпроцесс питон просто вернуться к его умолчанию PYTHONPATH просто удалить текущую из среды (пропустить env.append часть)

+0

Как найти путь к среде python по умолчанию (тот, который я получаю с помощью sys.path в интерпретаторе python из терминала). – Gaurav

+0

Вам просто нужно удалить PYTHONPATH из переменных окружения, а Python вернется к своему по умолчанию. –

+0

Спасибо за ваш ответ. Я дам ему попробовать. – Gaurav

Смежные вопросы