[英]Call a Python function from within a C program
我在C中有一個應用程序,在某些時候我需要解決非線性優化問題。 不幸的是,AFAIK在C中的資源非常有限(請讓我知道其他情況)。 但是在Python中使用它很簡單,例如scipy.optimize.minimize 。
當我試圖這樣做時,我遇到了一些看起來非常頻繁的陷阱,例如找不到Python.h
,模塊沒有加載,函數調用時出現分段錯誤等。
什么是快速簡便的第一計時器鏈接這兩個程序的方式?
為了使這項工作有一些你必須確保到位的東西:
python-dev
包)。 Python.h
文件,例如locate Python.h
。 其中一個應該出現在include
文件夾的sub(sub)文件夾中,例如路徑應該是../include/python2.7/Python.h
。 #include “<path_to_Python.h>"
以便能夠使用Python API。 使用任何教程來調用Python函數。 我用過這個 ,它就是訣竅。 然而,有幾個小點缺失:
無論何時使用任何Py<Name>
函數,例如PyImport_Import()
, 總是檢查結果以確保沒有錯誤,例如
// Load the module object pModule = PyImport_Import(pName); if (!pModule) { PyErr_Print(); printf("ERROR in pModule\\n"); exit(1); }
初始化Python解釋器之后,即在Py_Initialize();
,你必須將當前路徑附加到sys.path
以便能夠加載你的模塊(假設它位於你當前的目錄中):
PyObject *sys = PyImport_ImportModule("sys"); PyObject *path = PyObject_GetAttrString(sys, "path"); PyList_Append(path, PyString_FromString("."));
.py
。 ../include/python2.7/Python.h
文件嗎? 在編譯期間在gcc
選項中使用-I
選項在頭文件目錄列表中包含include
文件夾,例如-I /System/Library/Frameworks/Python.framework/Versions/2.7/include
。 include
文件夾所在的同一文件夾中,例如-L /System/Library/Frameworks/Python.framework/Versions/2.7/lib
,以及-lpython2.7
選項(當然會相應地調整它) Python版)。 現在你必須能夠成功編譯和執行你的C程序,並在其中調用你的Python程序。
我希望這是有益的,祝你好運!
資料來源:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.