Eclipse使用多个Python解释器与execnet
我正在使用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 个回答
'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 进程时,它绝对不是个好帮手。
看起来pydev会进行一些网站定制,特别是针对交互式或控制台使用的修改(根据我快速浏览的这个链接)。这些修改对通过execnet进行的进程来说并不太有用。
你可以尝试在调用execnet.makegateway之前,使用“del os.environ['PYTHONPATH']”来删除PYTHONPATH这个环境变量,或者更小心一点,只删除sitecustomize的部分。
希望这对你有帮助,
holger