在我的情况下,我将Python嵌入到我的应用程序中。当应用程序路径包含非Latin-1字符时,Py_Initialize会在内部调用exit(1)(更多信息稍后)。
因此,我检查是否可以使用标准解释器可执行文件复现此问题。
Windows上的Python-2.7.x似乎无法在PYTHONHOME路径包含Latin-1字符集之外的字符时工作。问题在于找不到并导入模块site。由于变音符好像可以正常工作,那么实际的限制是什么?只支持Latin-1吗?为什么在OSX上可以工作?
C:\Users\ъ\Python27\python.exe // fails to start (KOI8-R)
^
C:\Users\ġ\Python27\python.exe // fails to start (latin-3)
^
C:\Users\ä\Python27\python.exe // works fine (latin-1)
^
有什么想法吗?
背景:
我还没有逐步分析代码,但是当 site 不可用时,Python 2.6 和 Python 2.7 的行为也不同。Py 2.6 只会打印一条消息,而Py 2.7则无法启动。
static void
initsite(void)
{
PyObject *m;
m = PyImport_ImportModule("site");
if (m == NULL) {
...
// Python 2.7 and later
exit(1);
// Python 2.6 and prior
PyFile_WriteString("'import site' failed; traceback:\n", f);
}
...
}
Python 2.7: https://github.com/enthought/Python-2.7.3/blob/master/Python/pythonrun.c#L725
Python 2.6: https://github.com/python-git/python/blob/master/Python/pythonrun.c#L705