首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python ctype:从相对路径加载DLL

Python ctype:从相对路径加载DLL
EN

Stack Overflow用户
提问于 2010-06-05 21:16:01
回答 4查看 39.8K关注 0票数 28

我有一个Python模块,wrapper.py,它包装了一个C动态链接库。DLL与模块位于同一文件夹中。因此,我使用以下代码来加载它:

代码语言:javascript
运行
复制
myDll = ctypes.CDLL("MyCDLL.dll")

如果我从它自己的文件夹中执行wrapper.py,这是可行的。但是,如果我从其他地方运行它,它就会失败。这是因为ctype计算的是相对于当前工作目录的路径。

我的问题是,有没有一种方法可以指定DLL相对于包装器的路径,而不是当前的工作目录?这将使我能够将两者一起发布,并允许用户从任何地方运行/导入包装器。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-05 21:21:46

您可以使用os.path.dirname(__file__)来获取Python源文件所在的目录。

票数 27
EN

Stack Overflow用户

发布于 2010-06-05 21:30:24

对Matthew的回答进行扩展:

代码语言:javascript
运行
复制
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中工作。

票数 14
EN

Stack Overflow用户

发布于 2010-06-05 21:27:56

我总是将我的DLL所在的目录添加到路径中。这是可行的:

代码语言:javascript
运行
复制
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上的完整说明)

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2980479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档