从Django导入.so文件
Import a .so file from Django
我有一个C++代码
#include <Python.h>
static PyObject* py_veripy(PyObject* self, PyObject* args){
/* BODY */
return Py_BuildValue("i", 1);
}
// Bind Python function names to our C functions
static PyMethodDef veripy_methods[] = {
{"veripy", py_veripy, METH_VARARGS},
{NULL, NULL}
};
// Python calls this to let us initialize our module
extern "C" void initveripy(){
(void) Py_InitModule("veripy", veripy_methods);
}
我已经编译并创建了一个.so文件。我想在我的Django应用程序中使用这个库,但我不知道该把这个库放在我的目录中。很明显,我试着把它和代码放在一起,但它似乎找不到它。我发现这个教程和我的例子类似,但那里的C++代码中没有Python.h。请帮忙。
我认为您应该创建一个setup.py文件,以便编译您的库并将其放在某个地方。
例如,这里有一个我用于个人项目的setup.py文件的例子:
from setuptools import setup, Extension
setup(
name="modulename",
version="0.1",
test_suite = "nose.collector",
author='<author name>',
setup_requires=['nose>=0.11'],
description="My super module implementation",
ext_modules=[Extension("modulename", ["src/mysupermodule.c"])]
)
这将生成一个"build/"文件夹,但您当然可以在官方文档页面上找到更多关于setuptools的信息。
由于我们看不到库的目录结构,您的模块中似乎缺少import
条件,例如将__init__.py
放在适当的位置或为输出模块编写正确的扩展名。
好吧,由于您已经通过在views.py
文件旁边的应用程序文件夹中放置.so文件来解决您的问题,下面还有一些提示。
如果由于任何原因Python解释器无法识别.so模块,比如filename.so
,您需要在其旁边放置一个filename.py
文件,其中包含以下内容
def __bootstrap__():
global __bootstrap__, __loader__, __file__
import sys, pkg_resources, imp
__file__ = pkg_resources.resource_filename(__name__,'filename.so')
__loader__ = None; del __bootstrap__, __loader__
imp.load_dynamic(__name__,__file__)
__bootstrap__()
这确保了filename.so
的正确导入
更喜欢使用Cython与C/C++或FORTRAN接口。它是跨平台的。正如您所知,.so文件仅适用于linux/mac。
相关文章:
- 如何使用ndk-build.cmd构建Android.so文件
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 如何从构建 libgpio.so 的生成文件构建libgpio.a
- 用于构建 cuda .so 文件(共享库)的生成文件
- 无法从 SO 文件调用 SO 文件的函数 - C++生成文件
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 C++ 的 .so 文件中包含库
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- 为什么C++可执行文件在与较新的libstdc++.so链接时运行得更快?
- Google Colab 看不到 .so 文件
- ./main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或
- 如何在 Linux 中从 .so 文件打开可执行文件?
- 如何在makefile中包含tensorflow c ++".so"文件?
- 缺少 .h 文件,尽管从库文件夹链接了 .so 文件
- 如何在 CMake 超级生成中查找 dll/so 文件
- 如何用.so文件linux打包所有需要的库
- 如何调试visual studio 2017生成的C++代码.android中的SO文件和其他第三方库
- 如何使用 gnu c++ 程序获取共享对象文件(.so 文件)的体系结构
- EMF文件(.so)调试,符号找不到VTable错误
- 如何将c++库作为共享对象文件(.so)加载到Python中?