使用python ctypes.CDLL()从其他目录加载.dll时出错
问题内容:
我要以下目录结构:
MainProject
| ...project files
| rtlsdr\
| | rtlsdr.dll
| | ...other .dll's etc.
我正在库 ctypes中 使用函数 CDLL() 进行加载。当我的工作目录是: __rtlsdr.dll``rtlsdr\
$ cd rtlsdr
$ python
> from ctypes import *
> d = CDLL('rtlsdr.dll')
但是,当我尝试从另一个目录加载文件时:
$ cd MainProject
$ python
> from ctypes import *
> d = CDLL('rtlsdr\\rtlsdr.dll')
我收到一个错误:
WindowsError: [Error 126] The specified module could not be found.
这里有什么问题?
问题答案:
一个DLL
可能有其他DLL依赖不在工作目录或系统路径。因此,如果没有明确指定,系统将无法找到那些依赖项。我发现的最佳方法是将包含依赖项的目录的位置添加到系统路径:
import os
from ctypes import *
abs_path_to_rtlsdr = 'C:\\something\\...\\rtlsdr'
os.environ['PATH'] = abs_path_to_rtlsdr + os.pathsep + os.environ['PATH']
d = CDLL('rtlsdr.dll')
当前会话关闭后,PATH
变量将返回其原始状态。
另一个选择是更改工作目录,但这可能会影响其他模块的导入:
import os
os.chdir(abs_path_to_rtlsdr)
# load dll etc...