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

2 投票
3 回答
1382 浏览
提问于 2025-04-16 00:31

这个故事开始于我在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脚本,而第二个脚本会因为上面的错误而失败。

现在我想找到一种方法来防止这个问题发生,因为它会使用默认的Python设置来运行非默认的Python(这些是PyDev添加的)。

我不想改变标准调用方式(python file.py),但我希望能够在PyDev中顺利运行我的脚本,并且能够使用默认或替代的Python环境。

有没有什么好的建议呢?

3 个回答

0

我可能理解得不太对,但我觉得你是在用pydev调用一个脚本,这个脚本运行得还不错,但它又去执行另一个需要不同版本的脚本。

虽然这可能会因安装环境不同而有所区别,但你可以用os.system("c:\absolute\path\to\proper\version\of\python.exe second.py")来解决这个问题。

如果PyDev设置了一些冲突的环境变量,你可能需要考虑用subprocess而不是os.system。

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

这样你就可以用一个句柄来调用一个进程,这样你可以选择等待它结束。同时,它也允许你在执行时传递环境变量。

0

我觉得你应该这样调用:

import sys

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

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

2

我找到了一种看起来不错的解决办法,特别是因为它不会影响在其他系统上运行脚本。只需要运行 python -E second.py 这个命令就可以了——这样可以强制 Python 忽略所有以 PYTHON 开头的环境变量。

撰写回答