Eclipse с использованием нескольких интерпретаторов Python с execnet - PullRequest
3 голосов
/ 14 июля 2010

Я использую пакет execnet , чтобы разрешить связь между скриптами 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

ПРИМЕЧАНИЕ:

  • Версия 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)

Я получил следующие выходные данные:

Сравнение файлов FileMerge можно найти по адресу eclipse_output.txt и Terminal_output.pdf .

Есть подсказки?Спасибо

Ответы [ 2 ]

4 голосов
/ 15 июля 2010

похоже, что pydev выполняет настройку сайта и, в частности, модифицирует вещи для интерактивного / консольного использования (судя по очень быстрому просмотру http://github.com/aptana/Pydev/blob/master/plugins/org.python.pydev/pysrc/pydev_sitecustomize/sitecustomize.py).Это не полезно или не подходит для процессов, опосредованных execnet.

Вы можете попробовать "del os.environ ['PYTHONPATH']" перед тем, как вызывать execnet.makegateway, или, чтобы быть более осторожным, просто удалить часть сайта с настройками.

hth, holger

1 голос
/ 14 июля 2010
'import site' failed; use -v for traceback

Я видел это, когда питону не удалось найти свою достопримечательность. Что указывает на наличие проблемы с PYTHONHOME.

Проверьте http://docs.python.org/using/cmdline.html#envvar-PYTHONHOME возможно, затмение портит вашу среду.

Edit:

Посмотрев на ваши дампы env, похоже, что eclipse определенно работает с PYTHONPATH, что приведет к некорректной работе процессов вашего дочернего python. По сути, здесь происходит то, что eclipse запускает экземпляр python v2 с PYTHONPATH, указывающим на каталоги python v2. Затем вы запускаете процесс python v3, который пытается загрузить ориентир из каталогов python v2 ...
Вам нужно найти способ, чтобы затмение не связывалось с PYTHONPATH. Я не уверен, что Eclipse пытается сделать, делая это, но, конечно, это не друг, когда вы хотите создавать новые процессы Python.

...