首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有非拉丁-1 PYTHONHOME路径的Python

具有非拉丁-1 PYTHONHOME路径的Python
EN

Stack Overflow用户
提问于 2016-05-19 06:58:29
回答 2查看 494关注 0票数 10

在我的例子中,我将Python嵌入到我的应用程序中。当我的应用程序的路径包含一个非拉丁字符时,Py_Initialize在内部调用exit(1) (稍后会有更多信息)。

,所以我检查了是否可以用标准的解释器可执行文件.来再现它。

当PYTHONHOME的路径包含拉丁-1字符集外的字符时,Windows上的Python2.7.x似乎无法工作。问题是无法找到并导入模块站点。既然umlauts似乎有效,这里的实际限制是什么?只有拉丁文-1支持吗?为什么它要在OSX上工作呢?

代码语言:javascript
复制
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)
         ^

有什么想法吗?

背景:

我还没有完成代码,但是当站点不可用时,Python2.6和Python2.7的行为也不同。Py 2.6刚刚打印一条消息,Py 2.7拒绝开始。

代码语言:javascript
复制
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.7https://github.com/enthought/Python-2.7.3/blob/master/Python/pythonrun.c#L725

Python2.6:https://github.com/python-git/python/blob/master/Python/pythonrun.c#L705

EN

回答 2

Stack Overflow用户

发布于 2016-05-19 08:11:50

我认为问题在于,在内部,Python2将所有内容作为平台系统编码中的字节字符串处理,这是(在西欧) CP1252是拉丁-1的一个变体。因此,它不能正确处理包含其他字符的PYTHONHOME路径也就不足为奇了。

但是,当我年轻的时候,我已经习惯了好的8.3格式的MS/DOS文件。

我仍然可以在Windows 7框中看到(并使用它们),控制台(CMD.EXE)窗口中有CMD.EXE。这种格式只使用ASCII大写字符和tilda (~),因此可以用作解决办法:只需在环境变量PYTHONHOME中声明8.3路径,并使用该8.3路径启动python。

顺便说一句,PYTHONHOME最好使用既不包含特殊字符,也不包含nore空格的路径。它可以工作,但它可能会导致其他模块的问题。

票数 2
EN

Stack Overflow用户

发布于 2016-05-25 11:28:43

查看 function version 2.7给出了以下定义:

代码语言:javascript
复制
PyObject *
PyImport_ImportModule(const char *name)
{
    PyObject *pname;
    PyObject *result;

    pname = PyString_FromString(name);
    if (pname == NULL)
        return NULL;
    result = PyImport_Import(pname);
    Py_DECREF(pname);
    return result;
}

在查看 function version 3.5时,除了使用

代码语言:javascript
复制
pname = PyUnicode_FromString(name);

而不是

代码语言:javascript
复制
pname = PyString_FromString(name);

您可以查看PyString_FromStringPyUnicode_FromString,但是很明显,python2不使用unicode,python3也使用unicode,但是我还没有发现这究竟是如何/在哪里导致您描述的行为的。

function (version 2.7)只像这样使用module_name

代码语言:javascript
复制
r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
                          globals, silly_list, 0, NULL);

转移责任..。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37315999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档