我试图用Python将Python函数包到C++ API。我有两个模块sam1.pyx和sam2.pyx
## - sam1.pyx
import sam2
cdef public double calc(double x, double y):
return sam2.calc_sub(x,y)
sam2.py文件的内容如下
^{pr2}$使用这样的结构,将生成被包装的sam1.h
以及相应的{
在Cpp应用程序中使用时
#include<iostream>
#include<Python.h>
#include"sam1.h"
using namespace std;
int main(){
Py_Initialize();
#if PY_MAJOR_VERSION < 3
initsam1();
#else
PyInit_sam1();
#endif
cout << "Starting Program!!"<<endl;
cout << calc(3, 5);
Py_Finalize();
return 0;
}
未导入sam2.py
(普通python),错误是
Exception NameError: "name 'sam2' is not defined" in 'sam1.calc' ignored
你能告诉我缺了什么吗?在
问题1是您的模块初始化功能失败。在python3中,您需要针对NULL测试输出,然后打印错误(如果发生):
我想你什么也不做。可能只是
PyErr_Occurred
)。这告诉你:这个回溯很有希望给你提供你需要的线索——它没有找到
^{pr2}$sam2
。这是因为默认情况下,当前目录不在C api程序的路径上。您需要将其设置为这样-以下代码在Py_Initialize
之后,但在模块初始化之前:它得到
sys.path
并将.
附加到它。之后一切都很好。在注意-如果您从其他目录调用程序,则“.”表示错误的位置。如果是这种情况,那么您需要做一些更聪明的事情,并计算出目录的填充路径,可能是
argv[0]
。在相关问题 更多 >
编程相关推荐