我正在为python编写C扩展。我只是暂时试验,我写了一个hello world扩展,看起来像这样:
#include <Python2.7/Python.h>
static PyObject* helloworld(PyObject* self)
{
return Py_BuildValue("s", "Hello, Python extensions!!");
}
static char helloworld_docs[] = "helloworld( ): Any message you want to put here!!\n";
static PyMethodDef helloworld_funcs[] = {
{"helloworld", (PyCFunction)helloworld, METH_NOARGS, helloworld_docs},
{NULL,NULL,0,NULL}
};
void inithelloworld(void)
{
Py_InitModule3("helloworld", helloworld_funcs,"Extension module example!");
}
从我编写的setup.py文件安装代码并从命令行安装后,代码完全正常
python setup.py install
我想要的是以下内容:
我想将C文件用作python扩展模块,而不安装它,我想在项目中使用它作为另一个python文件,而不是我需要在我的python模块获得之前安装的文件使用它的功能。有没有办法做到这一点?
答案 0 :(得分:1)
您可以直接编译扩展而无需安装(通常类似于python setup.py build
)。然后,您必须确保解释器可以找到已编译的模块(例如,通过将其复制到导入它的脚本旁边,或设置PYTHONPATH
)。
答案 1 :(得分:0)
您可以通过不扩展python来创建“自己的解释器”,而是将其嵌入到您的应用程序中。这样,您的对象将始终可供运行程序的用户使用。在某些情况下,这是非常常见的事情,例如,查看已包含所有bpy
,bmesh
和bge
模块的Blender项目。
缺点是,您的用户无法直接使用python
命令,他们必须使用您的hello_world_python
。 (当然,您也可以将扩展名作为模块提供。)这也意味着,您必须为要支持的所有平台编译和分发应用程序 - 如果您想将其作为二进制文件分发,让您的用户生活更轻松。
有关将python嵌入程序的更多信息,请阅读文档的主要部分:
Embedding Python in Another Application
个人建议: 尽可能使用Python 3.5,并停止支持旧的2.x版本。有关详细信息,请阅读以下文章:Should I use Python 2 or Python 3 for my development activity?