如何正确使用PyDev与两个不同的Python版本与脚本调用其他python脚本?

时间:2010-06-28 15:22:05

标签: python windows environment-variables

当我从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环境不包含PYTHONHOMECLASSPATHPYTHONPATH,但PyDev会添加它们。

现在问题是在一个阶段我的python脚本使用os.system(python second.py)执行另一个python脚本,第二个脚本将因上述错误而失败。

现在我正在寻找一种方法来防止这个问题发生,因为它将使用非默认设置(由PyDev添加)运行执行默认python。

我不想更改标准调用(python file.py),但我希望能够毫无问题地从pydev运行我的脚本,并且能够使用默认或替代python环境。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

我找到了一个特殊的接缝解决方案,因为它不会干扰在其他系统上运行脚本,只是为了运行python -E second.py - 这将迫使Python忽略PYTHON *环境变量。

答案 1 :(得分:0)

我可能不太明白这一点,但我认为你正在调用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

这将允许您使用句柄调用进程,因此您可以选择等待它终止。它还允许您在执行时传递环境变量。

答案 2 :(得分:0)

我相信你的电话应该是:

导入sys

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

这样你就可以保证你正在使用你正在运行的同一个解释器,而不是启动另一个解释器(或者你真的想使用另一个解释器吗?)