python cdll找不到模块

时间:2011-01-21 04:14:09

标签: python ctypes

我有一个由两个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 个答案:

答案 0 :(得分: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 :(得分: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'))