Как правильно использовать PyDev с двумя разными версиями Python со скриптами, которые вызывают другие скрипты Python? - PullRequest
2 голосов
/ 28 июня 2010

История началась с очень странной ошибки, когда я запускал свой скрипт из PyDev. Запуск одного и того же сценария извне не вызовет той же проблемы.

Fatal Python error: Py_Initialize: can't initialize sys standard streams
  File "C:\Python26\lib\encodings\__init__.py", line 123
    raise CodecRegistryError,\
                            ^
SyntaxError: invalid syntax

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Мне удалось выяснить, почему это происходит: в PyDev я использую две разные версии Python: 3.1 - это установка по умолчанию и 2.6 в качестве альтернативы.

Моя среда Windows не содержит PYTHONHOME, CLASSPATH, PYTHONPATH, но PyDev добавляет их.

Теперь проблема в том, что на одном этапе мой скрипт на Python выполняет другой скрипт на Python, используя os.system (python second.py), и второй скрипт завершится с ошибкой, указанной выше.

Теперь я ищу способ предотвратить эту проблему, которая возникает из-за того, что он запускает выполнение Python по умолчанию, используя настройки для нестандартного (добавлено PyDev).

Я не хочу менять стандартный вызов (python file.py), но я хочу иметь возможность без проблем запускать свой скрипт из pydev и использовать среду по умолчанию или альтернативную среду python.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 28 июня 2010

Я нашел решение, которое кажется приемлемым, особенно потому, что оно не будет мешать запуску сценариев в других системах, просто для запуска python -E second.py - это заставит Python игнорировать переменные окружения PYTHON *.

0 голосов
/ 02 июля 2010

Я считаю, что ваш звонок должен быть:

import sys

os.system (sys.executable + 'second.py')

Таким образом, вы гарантируете, что используете тот же самый интерпретатор, который используете в данный момент, а не запускаете другой (или вы действительно хотели использовать другой переводчик?)

0 голосов
/ 28 июня 2010

Возможно, я не совсем правильно понимаю, но я думаю, что вы вызываете скрипт из pydev, который работает нормально, но этот скрипт выполняет другой скрипт, который требует другой версии.

Хотя это, к сожалению, зависит от установки, вы можете использовать os.system ("c: \ absolute \ path \ to \ Proper \ version \ of \ python.exe second.py").

Если PyDev устанавливает конфликтующие переменные окружения, вы можете изучить подпроцесс через os.system.

http://docs.python.org/library/subprocess.html#using-the-subprocess-module

Это позволит вам вызывать процесс с дескриптором, поэтому вы можете при желании дождаться его завершения. Это также позволит вам передавать переменные окружения при выполнении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...