如何正确使用PyDev处理两个不同Python版本及调用其他脚本的脚本?
这个故事开始于我在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脚本在某个阶段会使用os.system(python second.py
)来执行另一个Python脚本,而第二个脚本会因为上面的错误而失败。
现在我想找到一种方法来防止这个问题发生,因为它会使用默认的Python设置来运行非默认的Python(这些是PyDev添加的)。
我不想改变标准调用方式(python file.py
),但我希望能够在PyDev中顺利运行我的脚本,并且能够使用默认或替代的Python环境。
有没有什么好的建议呢?
3 个回答
我可能理解得不太对,但我觉得你是在用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
这样你就可以用一个句柄来调用一个进程,这样你可以选择等待它结束。同时,它也允许你在执行时传递环境变量。
我觉得你应该这样调用:
import sys
os.system(sys.executable + ' second.py')
这样可以确保你使用的是当前正在运行的解释器,而不是启动另一个解释器(或者你真的想用另一个解释器吗?)
我找到了一种看起来不错的解决办法,特别是因为它不会影响在其他系统上运行脚本。只需要运行 python -E second.py
这个命令就可以了——这样可以强制 Python 忽略所有以 PYTHON 开头的环境变量。