2011-01-21 274 views
2

我有一個由兩個dll文件和一個python包裝組成的庫。python cdll找不到模塊

我目前有基於這三個文件的代碼與我的主python文件在同一個父目錄中。我現在試圖在繼續開發之前重構一些東西,並且希望將所述庫代碼移動到它自己的lib /目錄中。不幸的是,我沒有嘗試過任何幫助。

import ctypes 

_lib = ctypes.cdll["./my.dll"] 

位於python包裝文件中的上述代碼在其原始位置加載了完美的dll。我試着在新的位置加載它,如各種方式:

from ctypes import * 
import os 

path = os.path.dirname(os.path.realpath(__file__)) 
_lib = ctypes.CDLL(os.path.join(path, 'my.dll')) 

然而蟒蛇總是拋出一個異常說找不到模塊..我有複製並粘貼的路徑,以驗證它是在事實上,.dll文件的有效絕對路徑

有誰知道我需要做什麼才能將此庫重定位到子文件夾?我總是可以離開它,但我只是討厭混亂。

+0

會發生什麼事,如果你嘗試`ctypes.util.find_library( 'dll_name引起')`?系統搜索路徑中的父目錄是什麼? (你使用Windows?什麼版本?和什麼版本的Python?) – Velociraptors 2011-01-21 19:33:51

+0

我在Windows 7 x64上使用python 2.7;有問題的目錄definitly不在路徑上。我不明白爲什麼它需要在路徑上,因爲1)它與腳本調用它在同一個目錄中,並且2)我將一個絕對路徑傳遞給它。我將在今天晚上將您的建議結果更新回家時。 – jdsmith2816 2011-01-21 20:19:10

回答

4

我有同樣的問題,試圖加載magic1.dll - 此文件依賴於另外兩個.dll文件的,而當我從我當前的工作目錄中移動magic1.dll - 我無法加載。

此解決方案幫助:

pathToWin32Environment = os.getcwd() + "/environment-win32/libmagic/" 
pathToDll = pathToWin32Environment + "magic1.dll" 
if not os.path.exists(pathToDll): 
    #Give up if none of the above succeeded: 
    raise Exception('Could not locate ' + pathToDll) 
curr_dir_before = os.getcwd() 
os.chdir(pathToWin32Environment) 
libmagic = ctypes.CDLL('magic1.dll') 
os.chdir(curr_dir_before) 
1

確切的錯誤信息將有助於確定,但ctypes.dll(路徑)似乎對我無效。

例如。我得到這個,與Python 2.7:

>>> ctypes.dll("kernel32.dll") 
Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'dll' 

也許你的意思是這個:

>>> _lib = ctypes.CDLL(os.path.join(path, 'my.dll'))