簡體   English   中英

在python中使用C擴展,而不將其作為模塊安裝

[英]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來創建“自己的解釋器”,而是將其嵌入到您的應用程序中。 這樣,您的對象將始終可供運行程序的用戶使用。 在某些情況下,這是非常常見的事情,例如,查看已包含所有bpybmeshbge模塊的Blender項目。

缺點是,您的用戶無法直接使用python命令,他們必須使用您的hello_world_python (當然,您也可以將擴展名作為模塊提供。)這也意味着,您必須為要支持的所有平台編譯和分發應用程序 - 如果您想將其作為二進制文件分發,讓您的用戶生活更輕松。

有關將python嵌入到程序中的更多信息,請閱讀文檔的propriate部分:

在另一個應用程序中嵌入Python

個人建議:盡可能使用Python 3.5,並停止支持舊的2.x版本。 有關更多信息,請閱讀本文: 我應該將Python 2或Python 3用於我的開發活動嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM