致命的 Python 错误:Py_Initialize:无法获取语言环境编码

致命的 Python 错误:Py_Initialize:无法获取语言环境编码

我正在尝试通过调用从 C++ 执行 Python 脚本popen().

重要的代码如下:

ostringstream command;
command<<"cd ; python3 piap.py "<<u<<" "<<rho;
if(!(in = popen(command.str().c_str(), "r"))){
    cout<<"some problem with the subprocess"<<endl;
}

我也尝试过打电话python3.5popen但没有任何改变。

你可以在这里找到整个 cpp 文件:http://pastebin.com/KeXsgzjx 但其余的只是针对特定问题的样板。

代码编译得很好,但在运行时,它会产生以下错误消息:

致命的 Python 错误:Py_Initialize:无法获取语言环境编码
文件“/home/lhk/programs/clion-2016.1.2/bin/gdb/lib/python2.7/encodings/在里面.py”, 第 123 行引发 CodecRegistryError,\ ^ SyntaxError: 语法无效

当前线程 0x00007ffff7fd1700(最近调用优先):已中止(核心转储)

该问题有重复:

致命的 Python 错误:Py_Initialize:无法获取语言环境编码...SyntaxError:语法无效中止(核心转储)

Bash 尝试在未知命令上运行 python 并在 Py_Initialize 中失败

不幸的是,这些解决方案对我来说不起作用:

  • 我还没有设置pythonpath
  • 我的python脚本指定了确切的版本#!/usr/bin/python3.5
  • /usr/lib/command-not-found明确地调用/usr/bin/python3

这个漏洞还有更多问题。

  1. 它似乎与我的 IDE Clion 有关。您可以在错误消息中看到这一点。不知何故,python 解释器尝试从 clion 发行版加载初始化脚本
  2. 它只在调试期间出现。在发布模式下运行时,popen() 调用工作正常。

我检查了 Clion 中配置为默认的 Python 版本,它是 3.5,并且还有正确的解释器。

我很困惑,为什么选择了错误的解释器?

答案1

我遇到了类似的问题不同的背景(从交互环境中调用 python3 脚本时访问plot 程序)。发生这种情况的原因显然是,环境变量(特别是PATH)被设置为本地值,从而禁用了 Python3 的系统范围安装。

你可以通过在重新开始env。应该看起来像这样:

ostringstream command;
command<<"cd ; env -i bash -l -c 'python3 piap.py "<<u<<" "<<rho<<"'";
if(!(in = popen(command.str().c_str(), "r"))){
    cout<<"some problem with the subprocess"<<endl;
}

相关内容