0

我已经使用 python 3.3 和 Qt4.8 创建了一个 PyQt 应用程序,并且我正在从它开始一个 QProcess。新启动的子进程尝试运行 python 脚本,但该脚本失败,因为它在 3.3 目录中搜索 python 模块(系统上的默认 python 为 2.7)。

我认为它正在 python 3.3 目录中搜索 python 模块,因为子进程从父进程继承其环境(因此也继承了 PYTHONPATH)。我可以使用 QProcess.setProcessEnvironment 更改 PYTHONPATH,但是如何在使用 python 3.3 的 PyQt 应用程序中获取 2.7 的 PYTHONPATH 值?

编辑: Viktor 下面的答案对我有用。我需要从环境中删除 PYTHONPATH 和 PYTHONHOME。我需要删除 PYTHONHOME 因为否则启动器正在从我的应用程序的本地目录中使用(我使用 py2app 创建了应用程序/包)。下面是代码:

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

1 回答 1

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')

如果您希望子进程 python 恢复为默认值PYTHONPATH,只需从环境中删除当前子进程(跳过该env.append部分)

于 2013-08-31T16:59:13.230 回答