我正在使用execnet package来允许不同Python解释器解释的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
注:
编辑:
我编写了一个代码来显示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 vs. terminal_output.pdf找到文件的FileMerge比较。
任何提示? 感谢
答案 0 :(得分:4)
似乎pydev会进行网站自定义,特别是修改交互式/控制台使用的东西(从http://github.com/aptana/Pydev/blob/master/plugins/org.python.pydev/pysrc/pydev_sitecustomize/sitecustomize.py的非常快速的浏览来判断)。这对execnet介导的过程没有用或不合适。
你可以在调用execnet.makegateway之前尝试“del os.environ ['PYTHONPATH']”,或者,为了更加小心,只需删除它的sitecustomize部分。
HTH, 霍尔格
答案 1 :(得分:1)
'import site' failed; use -v for traceback
我已经看到当python无法找到它的里程碑时。这表明存在PYTHONHOME问题。
查看http://docs.python.org/using/cmdline.html#envvar-PYTHONHOME或许eclipse会破坏你的环境。
编辑:
看看你的env转储,看起来eclipse肯定会搞乱PYTHONPATH,这会导致你的孩子python进程无法正常工作。
基本上你在这里发生的是eclipse启动一个python v2实例,其中PYTHONPATH指向python v2目录。然后你产生了一个python v3进程,试图从python v2目录中加载它的地标...
你需要找到一种让日食不会与PYTHONPATH混淆的方法。我不确定eclipse正在尝试做什么,但是当你想要生成新的python进程时肯定不是朋友。