Я использую пакет 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 Interpreter, настроенный для проекта: python3
  • Интерпретаторы Python для "Preferences / Interpreter - 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.

Есть подсказки? благодаря

3
Eduardo Coelho 14 Июл 2010 в 20:21

2 ответа

Лучший ответ
'import site' failed; use -v for traceback

Я видел это, когда питон не мог найти свой ориентир. Это указывает на наличие проблемы с 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 ...
Вам нужно найти способ, чтобы eclipse не мешал PYTHONPATH. Я не уверен, что eclipse пытается сделать, делая это, но он определенно не друг, когда вы хотите порождать новые процессы Python.

1
Charles 14 Июл 2010 в 19:54