Eclipse使用多个Python解释器与execnet

3 投票
2 回答
1444 浏览
提问于 2025-04-16 01:17

我正在使用execnet包,这个包可以让不同的Python解释器之间的脚本进行通信。

下面这段代码(test_execnet.py):

import execnet
    for python_version in ('python', 'python3'):
        try:
            gw = execnet.makegateway("popen//python="+python_version)
            ch = gw.remote_exec('channel.send(1/3)')
            res = ch.receive()
            print(python_version, ': ', res, sep ="")
        except:
            print('problems with ', python_version)

在命令行终端中运行得非常顺利,输出结果如下:

$ python3 test_execnet.py 
python: 0
python3: 0.333333333333

但是,如果我尝试在Eclipse IDE中运行相同的代码,就会出现以下错误:

'import site' failed; use -v for traceback
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "<string>", line 4, in <module>
  File "<string>", line 2, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/site-packages/execnet/gateway_base.py", line 8, in <module>
    import sys, os, weakref
  File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/os.py", line 380, in <module>
    from _abcoll import MutableMapping  # Can't use collections (bootstrap)
  File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/_abcoll.py", line 54
    class Hashable(metaclass=ABCMeta):
                            ^
SyntaxError: invalid syntax
problems with  python
problems with  python3

注意:

  • Eclipse版本:3.6.0
  • 为项目配置的PyDev解释器:python3
  • 在“偏好设置/解释器 - Python”中的Python解释器:
    • python (/usr/bin/python)
    • python3 (/Library/Frameworks/Python.Framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python)

编辑:

我写了一段代码来显示os.environ,代码如下:

for python_version in ('python', 'python3'):
    try:
        import os
        for item in os.environ:
            print(item, '= ', os.environ[item])
    except:
        print('problems with ', python_version)

我得到了以下输出:

可以在eclipse_output.txt与terminal_output.pdf中找到文件的比较结果。

有没有什么提示呢?谢谢!

2 个回答

1
'import site' failed; use -v for traceback

我发现当 Python 找不到它的标志文件时,这说明可能有 PYTHONHOME 的问题。

你可以查看一下这个链接 http://docs.python.org/using/cmdline.html#envvar-PYTHONHOME,也许是 Eclipse 把你的环境搞乱了。

补充:

我看了你的环境设置,发现 Eclipse 确实在搞乱 PYTHONPATH,这会导致你启动的 Python 子进程无法正常工作。简单来说,Eclipse 启动了一个 Python 2 的实例,并且 PYTHONPATH 指向了 Python 2 的目录。然后你又启动了一个 Python 3 的进程,它试图从 Python 2 的目录加载它需要的文件...
你需要找到一种方法,让 Eclipse 不去干扰 PYTHONPATH。我不太清楚 Eclipse 这样做的目的是什么,但在你想要启动新的 Python 进程时,它绝对不是个好帮手。

3

看起来pydev会进行一些网站定制,特别是针对交互式或控制台使用的修改(根据我快速浏览的这个链接)。这些修改对通过execnet进行的进程来说并不太有用。

你可以尝试在调用execnet.makegateway之前,使用“del os.environ['PYTHONPATH']”来删除PYTHONPATH这个环境变量,或者更小心一点,只删除sitecustomize的部分。

希望这对你有帮助,

holger

撰写回答