首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows上使用python中的libarchive

在Windows上使用python中的libarchive
EN

Stack Overflow用户
提问于 2016-05-11 22:02:02
回答 1查看 4.7K关注 0票数 4

我正在尝试让libarchive模块在windows上的python3.4中工作。我已经使用pip安装了libarchive-c,一切正常,但是每当我尝试将它导入到我的代码中,甚至单独运行它时,我都会遇到错误:

代码语言:javascript
复制
OSError: [WinError 126] The specified module could not be found

这是来自ffi.py的以下代码:

代码语言:javascript
复制
libarchive_path = os.environ.get('LIBARCHIVE') or find_library('archive') 
libarchive = ctypes.cdll.LoadLibrary(libarchive_path)

我以前从未使用过ctype,但如果我理解正确的话,它是在寻找外部DLL。所以找到并安装了http://gnuwin32.sourceforge.net/packages/libarchive.htm,我也将C:\Program Files (x86)\GnuWin32\bin添加到我的%PATH%环境变量中,但它仍然无法加载模块。因为它没有给我提供名称,所以我不确定它在寻找什么模块。我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2016-05-12 05:49:30

(免责声明)我为https://github.com/Changaco/python-libarchive-c做贡献,我维护https://github.com/nexB/scancode-toolkit

两者都包含用于libarchivectypes绑定,尽管ScanCode仅用于提取。

我在这里的答案是python-libarchive-c,但是ScanCode包含了您正在寻找的一些DLL,所以我在这两个库中都添加了一点。

要让python-libarchive-c在Windows上运行,您需要一个libarchive DLL和它的dep,然后可以加载它们。

python-libarchive-c中没有捆绑的预先构建的DLL,但是我在这里为另一个项目预先构建了Windows二进制文件:https://github.com/nexB/scancode-toolkit/tree/develop/src/extractcode/bin/win-32/bin相应的源代码在那里:https://github.com/nexB/scancode-thirdparty-src,如果您想自己从源代码重新构建,可以在那里获得MinGW32构建说明:https://github.com/nexB/scancode-thirdparty-src/blob/master/libarchive/build.sh#L47

一般而言,要从路径加载DLL --假设var libarchive包含该DLL的完整路径--请使用以下命令:lib = ctypes.CDLL(libarchive)现在这是用于扫描代码。对于python-libarchive-c,您可以尝试使用:set LIBARCHIVE="C:\.....\libarchive.dll"设置LIBARCHIVE变量来指向您的DLL的路径

然后启动Python,导入库并使用它。

注:我还没有测试这个,但是这个应该可以工作。如果没有,请提交一个bug。我也没有在Python 3.4上运行任何测试。我主要使用Python 2.7。但是DLL和代码根本不是Python2.7特有的。

FWIW,scancode加载库的方式更有参与度,因为它可以使用传统位置从相同的代码加载特定32位或64位archs的DLL Win/Linux/Mac。您可以在那里看到实际运行的代码:https://github.com/nexB/scancode-toolkit/blob/develop/src/extractcode/libarchive2.py#L64

ScanCode还没有使用python-libarchive-c自动取款机,而是一个不同的/定制的ctype绑定,只专注于更具体的提取用例。至少它可以让你访问一个Win DLL和它的dep(或者一个编译它们的指令),以及一个如何正确加载它的例子。

/HTH

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

https://stackoverflow.com/questions/37165002

复制
相关文章

相似问题

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