[英]using a C extension in python, without installing it as a module
我正在為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模塊使用它之前安裝的文件功能。 有沒有辦法做到這一點?
您可以簡單地編譯擴展而無需安裝(通常類似於python setup.py build
)。 然后,您必須確保解釋器可以找到已編譯的模塊(例如,通過將其復制到導入它的腳本旁邊,或設置PYTHONPATH
)。
您可以通過不擴展python來創建“自己的解釋器”,而是將其嵌入到您的應用程序中。 這樣,您的對象將始終可供運行程序的用戶使用。 在某些情況下,這是非常常見的事情,例如,查看已包含所有bpy
, bmesh
和bge
模塊的Blender項目。
缺點是,您的用戶無法直接使用python
命令,他們必須使用您的hello_world_python
。 (當然,您也可以將擴展名作為模塊提供。)這也意味着,您必須為要支持的所有平台編譯和分發應用程序 - 如果您想將其作為二進制文件分發,讓您的用戶生活更輕松。
有關將python嵌入到程序中的更多信息,請閱讀文檔的propriate部分:
個人建議:盡可能使用Python 3.5,並停止支持舊的2.x版本。 有關更多信息,請閱讀本文: 我應該將Python 2或Python 3用於我的開發活動嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.