我有一个Python模块,wrapper.py
,它包装了一个C动态链接库。DLL与模块位于同一文件夹中。因此,我使用以下代码来加载它:
myDll = ctypes.CDLL("MyCDLL.dll")
如果我从它自己的文件夹中执行wrapper.py
,这是可行的。但是,如果我从其他地方运行它,它就会失败。这是因为ctype计算的是相对于当前工作目录的路径。
我的问题是,有没有一种方法可以指定DLL相对于包装器的路径,而不是当前的工作目录?这将使我能够将两者一起发布,并允许用户从任何地方运行/导入包装器。
发布于 2010-06-05 21:21:46
您可以使用os.path.dirname(__file__)
来获取Python源文件所在的目录。
发布于 2010-06-05 21:30:24
对Matthew的回答进行扩展:
import os.path
dll_name = "MyCDLL.dll"
dllabspath = os.path.dirname(os.path.abspath(__file__)) + os.path.sep + dll_name
myDll = ctypes.CDLL(dllabspath)
这只能在脚本中工作,而不能在控制台或py2exe
中工作。
发布于 2010-06-05 21:27:56
我总是将我的DLL所在的目录添加到路径中。这是可行的:
os.environ['PATH'] = os.path.dirname(__file__) + ';' + os.environ['PATH']
windll.LoadLibrary('mydll.dll')
请注意,如果您使用py2exe,这将不起作用(因为没有设置__file__
)。在这种情况下,您需要依赖于sys.executable
属性(http://www.py2exe.org/index.cgi/WhereAmI上的完整说明)
https://stackoverflow.com/questions/2980479
复制相似问题