ubuntu - 无法从嵌入式 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++ 可执行文件中运行时,内置模块列表更短,并且缺少一些模块。
我错过了什么?
解决方案
仅供参考,我遇到了完全相同的问题。
我在 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 块中:
推荐阅读
- office-js - office javascript 加载项功能区标准命令,例如复制或剪切
- r - 动态 UI,允许更新过滤器并在闪亮的 R 中绘制
- excel - 使用变量作为文件名的打开工作簿命令
- react-admin - 如何在 React-Admin 中更改 SaveButton 图标
- angular - 我应该如何打包一个 Angular 组件以在不同的解决方案中共享?
- node.js - Dynamo - batchGet 返回空
- html - 避免 HTML 表格溢出
- php - 我无法在我的 WordPress 帖子中添加媒体(图片)
- c++ - 模板类未特化时为模板类的模板成员函数编写特化的解决方法
- c++ - 如果是来自特定基类的派生类,如何强制转换