(免责声明)我为https://github.com/Changaco/python-libarchive-c做出贡献并维护https://github.com/nexB/scancode-toolkit
两者都包含 的ctypes
绑定libarchive
,但 ScanCode 仅用于提取。
我在这里的答案是python-libarchive-c
,但 ScanCode 包含您正在寻找的一些 DLL,所以我在两者中都包含了一些内容。
要python-libarchive-c
在 Windows 上运行,您需要一个libarchive
DLL 及其可以加载的 deps。
没有捆绑预构建的 DLL,python-libarchive-c
但我在这里为另一个项目预构建了 Windows 二进制文件:
https
: //github.com/nexB/scancode-toolkit/tree/develop/src/extractcode/bin/win-32/bin有相应的源代码:httpsMinGW32
://github.com/nexB/scancode-thirdparty-src如果你想自己从源代码重建,
你有构建说明: https ://github.com/nexB/scancode-thirdparty- src/blob/master/libarchive/build.sh#L47
通常要从路径加载 DLL——假设 varlibarchive
包含该 DLL 的完整路径——使用这个:
lib = ctypes.CDLL(libarchive)
现在这是 Scancode。对于python-libarchive-c
,您可以尝试将LIBARCHIVE
变量设置为指向 DLL 的路径:
set LIBARCHIVE="C:\.....\libarchive.dll"
然后启动 Python,导入库并使用它。
注意:我没有测试这个(还),但这应该工作。如果不是,请提交错误。我也没有在 Python 3.4 上运行任何测试。我主要使用 Python 2.7。但是 DLL 和代码根本不是 Python 2.7 特定的。
FWIW,扫描码加载库的方式更有吸引力,因为它可以使用常规位置从相同的代码加载 DLL Win/Linux/Mac 用于特定的 32 位或 64 位拱门。你可以在那里看到代码:
https ://github.com/nexB/scancode-toolkit/blob/develop/src/extractcode/libarchive2.py#L64
ScanCodepython-libarchive-c
尚未使用 ATM,但不同/自定义 ctypes 绑定仅专注于更具体的提取用例。至少它使您可以访问 Win DLL 及其依赖项(或构建它们的指令)以及如何正确加载它的示例。
/HTH