python - c++运行python代码以导入自定义模块

标签 python c++ boost-python

我是编写 c++/python 混合程序的新手。

我已经编译了 my_class.so(在 C++ 中)并且可以在 Python 中导入它。

以下程序运行没有任何问题。

#!/user/bin/env python
from my_class import *
l = my_class()
l.doSomething("filename")

我把所有东西都放在同一个文件夹下,如果我启动 python 环境,我可以毫无错误地执行以下操作

>>>import my_class

这是我接下来尝试的,我尝试从 C++ 调用 python 脚本, “hello”和“import numpy”部分成功运行,没有任何问题。

接下来我尝试了一些纯粹实验性的东西,我想测试这种可能性,但我不期望任何实际应用,我想导入我自己的类。 像下面这样(我知道我正在创建一个 c++/python/c++ 链):

#include <Python.h> 

int main(int argc, char *argv[]){ 
      Py_Initialize(); 
      //PyRun_SimpleString("print \"hello!\""); 
      //PyRun_SimpleString("import numpy"); 
      PyRun_SimpleString("import my_class"); 
      Py_Finalize(); 
      return 0; 
}

我收到以下错误:

Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named my_class

这并不奇怪,因为 my_class 不是标准模块,我可能需要告诉 c++ 程序中的 python 运行时在哪里可以找到这个模块。

但是我不确定我该怎么做。我假设至少我可以尝试将 my_class.so 作为自定义模块“安装”在 python 的标准路径中,但我想知道是否有更简单的解决方案。谢谢!

最佳答案

制作.so后,您可以安装my_class.so

结帐this postthis post .

关于python - c++运行python代码以导入自定义模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29529013/

相关文章:

python - 将 Factory Boy 与 GeoDjango PointFields 一起使用

c++ - "No appropriate default constructor available"-- 为什么还要调用默认构造函数?

python - 导出函数时boost python模板参数推导/替换失败

python - 如何使用从外部脚本调用的回调发送信号?

python - Scrapy 不产生请求

python - Python 中使用 asyncio 的多个 websocket 流

c++ - 在 comparable_distance 中使用 boost 段失败,而 linestring 有效

c++ - 为什么复制构造函数的参数是引用而不是指针?

python - 无法在 Boost Python 中返回类的实例

python - matplotlib(等单位长度): with 'equal' aspect ratio z-axis is not equal to x- and y-