我必须遵循目录结构:
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.
这里有什么问题?
答案 0 :(得分:4)
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...