首页 > 解决方案 > 无法从嵌入式 boost python 导入一些内置模块

问题描述

我在我的 C++ 应用程序中使用boost::python. 我得到错误:ModuleNotFoundError: No module named 'math'。一些内置模块可以工作,但有些不能。例如,import sys作品。

我验证了我有一个正常的 python 安装,并且当我从命令行运行 python 时,所有模块都正确导入。

我在嵌入式版本和命令行版本中都打印了sys.path, sys.executable, sys.version,sys.builtin_module_names只有一个区别 - 从我的 C++ 可执行文件中运行时,内置模块列表更短,并且缺少一些模块。

我错过了什么?

标签: ubuntuboost-pythonpython-3.9python-embedding

解决方案


仅供参考,我遇到了完全相同的问题。

我在 RHEL 7 上运行,并且正在构建一个共享库,它是复杂系统的一部分。在以下 4 个调用中,只有日历失败(返回 null):

PyObject* t1 = PyImport_ImportModule("calendar");
PyObject* t2 = PyImport_ImportModule("itertools");
PyObject* t3 = PyImport_ImportModule("appdirs");
PyObject* t4 = PyImport_ImportModule("cython");

在尝试了一大堆不同的模块/包之后,它似乎适用于像 sys 和 itertools 这样的内置包,并且它适用于站点包中的模块(即站点包中的简单 .py 文件),但当你有一个完整的包...一个带有init .py 文件的目录

如果您将对 PyImport_ImportModule 的调用放在 try/catch 块中:


推荐阅读