[英]Loading DLL from embedded python code in c
我的問題的症結在於:
我正在Windows XP上使用MS Visual Studio 10.0開發代碼,並且需要嵌入Python來進行一些繪圖,文件管理和其他操作。 我在使用sys.path查找我的Pure-Python模塊時遇到問題,但是我通過修改PYTHONPATH解決了該問題。
現在,我的問題是讓python查找某些模塊引入的動態庫。 特別是我的問題是將文件夾壓縮到同名的bzip2文件夾中。
從普通的python命令提示符下,這可以正常工作:
import tarfile
tar=tarfile.open('Code.tar.bz2','w:bz2')
tar.add('Code',arcname='Code')
tar.close()
但是,當我從C代碼調用此代碼時,它給了我這個錯誤:
Traceback (most recent call last):
File "<string>", line 4, in <module>
File "D:\My_Documents\Code\ScrollModel\trunk\PythonCode.py", line 20, in Colle
ctFiles
tar=tarfile.open(os.path.join(runPath,'CODE.tar.bz2'),'w:bz2')
File "c:\Python26\lib\tarfile.py", line 1671, in open
return func(name, filemode, fileobj, **kwargs)
File "c:\Python26\lib\tarfile.py", line 1737, in bz2open
raise CompressionError("bz2 module is not available")
tarfile.CompressionError: bz2 module is not available
我懷疑這個問題與嵌入式Python的 5.6節中所描述的相似,但是很難說出來。 如果我願意的話
Py_Initialize();
PyRun_SimpleString("import ssl\n");
Py_Finalize();
它也不起作用,我得到一個ImportError。
有人有這樣的問題嗎? 我錯過了重要的事情嗎?
試試這個,它可以在我的機器上工作。
在Visual Studio 2010中創建一個簡單的Windows控制台應用程序(刪除向導中的預編譯頭選項)。 用此代碼替換生成的代碼:
#include <Python.h>
int main(int argc, char *argv[]) {
Py_Initialize();
PyRun_SimpleString("import ssl \n"
"for f in dir(ssl):\n"
" print f \n" );
Py_Finalize();
return 0;
}
將PYTHONHOME設置為c:\\ Python ...
建立。 從任何地方運行,您應該看到ssl模塊內容的列表。
我也嘗試過Mingw。 同一文件,使用以下命令行構建:
gcc -Wall -o test.exe embeed.c -I%PYTHONHOME%\Include -L%PYTHONHOME%\libs -lpython26
嘿,我問過類似的問題 ,我的操作系統是Linux 。
當我編譯c文件時,應添加$(python-config --cflags --ldflags)
選項,如下
gcc test.c $(python-config --cflags --ldflags) -o test
我認為在Windows中,您還可以檢查python-config
選項,希望對您有所幫助!
我在Boost C ++ DLL中遇到了類似的問題。 任何外部DLL都必須位於DLL搜索路徑中。
以我的經驗,PYTHONPATH影響Python模塊(Python中的import語句將結束LoadLibrary調用),而構建選項與此無關。
加載DLL時,Windows不在乎該過程是什么。 換句話說,Python遵循與記事本相同的DLL加載規則 。 您可以通過將缺少的DLL復制到與python擴展名相同的目錄中或路徑中的目錄中,來確認您面臨Windows路徑問題。
要查找任何其他可執行文件或DLL所需的DLL,只需使用DependencyWalker打開DLL或EXE文件。 還有一個“配置文件”菜單,它將允許您運行您的應用程序並觀看它搜索和加載DLL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.