【问题标题】:Python3.3 - Fatal Python error: Py_Initialize: Unable to get the locale encodingPython3.3 - 致命的 Python 错误:Py_Initialize:无法获取语言环境编码
【发布时间】:2014-04-04 05:33:13
【问题描述】:

ImportError: 没有名为“编码”的模块

虽然错误是自我解释的,但我知道问题的原因。问题是平台在其路径名中使用冒号,所以当我设置路径时使用:

Py_SetPath("the/path/with:colon/");

然后调用:

Py_Initialize();

找不到需要导入的模块。所以,我的问题是:有什么方法可以在不重命名路径的情况下解决(我无法控制)?我能以某种方式逃避冒号吗?

谢谢!

【问题讨论】:

    标签: python linux python-3.x embedded fatal-error


    【解决方案1】:

    source code 的外观来看,我无法看到这样做...

    Py_SetPath 只是清除之前可能已设置的任何路径,然后将其重置为您提供的字符串,而无需进行实际处理。这就是Py_GetPath 返回的内容,我想这就是它的全部内容。

    可能可行的一个建议是在路径名中没有: 的地方创建一个指向目录的符号链接,然后改用它...

    【讨论】:

    • 感谢您的回答,您有关于符号链接的任何示例吗?看起来很有趣!
    • 您只需执行类似 (IIRC): ln -s "the/path/with:colon/" "some/path/without/colon" 的操作,然后在 C 代码中,您将使用 "some/path/without/colon" 代替 ...
    • Py_Initialize 创建sys 模块并调用PySys_SetPath(Py_GetPath()),后者使用平台DELIM 调用makepathobject。它不处理转义分隔符。我不知道是否可以解决这个问题,因为它处于引导解释器的中间。使用符号链接是个好主意。
    • 谢谢!但是我应该如何在我的代码中运行它?我正在寻找可以构建的解决方案...我找到了int symlink (const char *oldname, const char *newname),它仍然可用吗? (我要到明天才能测试,如果我知道的话我会睡得更好:D)
    • @JohnSmith 你就是这样做的;使用/tmp 作为目标目录,名称取自/dev/urandom,重试错误EEXISTEINTR 使用不同的名称
    猜你喜欢
    • 2014-01-16
    • 1970-01-01
    • 2019-08-31
    • 2020-03-09
    • 2020-07-03
    • 2013-05-06
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多