Я использую пакет 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.
Есть подсказки? благодаря
2 ответа
Похоже, что pydev настраивает сайт и, в частности, изменяет вещи для интерактивного / консольного использования (судя по очень быстрому беглому просмотру http://github.com/aptana/Pydev/blob/master/plugins/org.python.pydev/pysrc/pydev_sitecustomize/sitecustomize.py а>). Это бесполезно и не подходит для процессов, опосредованных execnet.
Вы можете попробовать "del os.environ ['PYTHONPATH']" перед вызовом execnet.makegateway, или, чтобы быть более осторожным, просто удалить его часть sitecustomize.
Hth, Holger
'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.
Похожие вопросы
Новые вопросы
eclipse
Eclipse - это IDE с открытым исходным кодом и платформа для создания приложений. Существует множество плагинов для различных языков программирования и других инструментов, ориентированных на разработку (таких как моделирование, просмотр баз данных и т. Д.). Этот тег следует использовать только для вопросов, конкретно касающихся Eclipse IDE или платформы, а не для общих (Java и т. Д.) Тем программирования.