2010-07-14 42 views
3

我正在使用execnet package來允許不同Python解釋器解釋的Python腳本之間的通信。使用execnet與多個Python解釋器的Eclipse

以下代碼(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解釋:
    • 蟒蛇(在/ usr/bin中/蟒)
    • 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) 

我得到了以下成果:

文件的FileMerge比較可以在eclipse_output.txt vs. terminal_output.pdf找到。

任何提示? 感謝

回答

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部分。

心連心, 霍爾格

+1

謝謝hpk42。這是關鍵。通過執行你所說的我可以從Eclipse IDE內部運行代碼。爲了確保在Eclipse IDE/Terminal中執行,我在'execnet.makegateway'調用之前放置了以下代碼:''import os if(os.environ.get('PYTHONPATH',None)): del os.environ ['PYTHONPATH']'' – 2010-07-15 12:24:14

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

我已經看到,當蟒蛇無法找到它的標誌性建築。這表明存在PYTHONHOME問題。

檢查出http://docs.python.org/using/cmdline.html#envvar-PYTHONHOME也許日食是擰你的環境。

編輯:

看着你的ENV轉儲,看起來像日食肯定是用PYTHONPATH,這將導致你的孩子的Python程序無法正常工作搞亂。 基本上你在這裏進行的是eclipse啓動一個python v2實例,一個指向python v2目錄的PYTHONPATH。然後你產生了一個python v3進程,它試圖從python v2目錄中加載它的地標......
你需要找到一種方法讓eclipse不會混淆PYTHONPATH。我不確定日食是怎麼做的,但是當你想要產生新的python進程時,它肯定是沒有朋友的。

+0

查爾斯,你可能已經指出瞭解決這個爛攤子的方式。我使用示例輸出編輯了問題。也許這指出了什麼是錯的。謝謝。我期待看到提示。 – 2010-07-14 19:43:22

+0

謝謝你的答覆查爾斯,你是對的。 Eclipse正在搞亂PYTHONPATH。下面的帖子中的hpk42已經顯示了處理這個問題的方法。 – 2010-07-15 12:18:34

相關問題