python cdll 找不到模块
我有一个库,里面有两个dll文件和一个python包装器。
现在,我的代码是基于这三个文件和我的主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'))
但是python总是抛出一个异常,提示找不到模块……我已经复制并粘贴了路径,以确认这确实是.dll文件的有效绝对路径。
有没有人知道我需要做什么才能把这个库移动到一个子文件夹里?我当然可以把它留在原地,但我就是讨厌杂乱。
2 个回答
1
确切的错误信息会更有助于我们确认问题,但我觉得ctypes.dll(path)这个写法不太对。
比如,我在使用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'))
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)