首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加载嵌入在带有ctype的python包中的C动态库

如何加载嵌入在带有ctype的python包中的C动态库
EN

Stack Overflow用户
提问于 2020-06-06 17:56:28
回答 1查看 282关注 0票数 2

我有一个python应用程序,它使用ctypes加载和调用动态C库。

我想用这个应用程序创建一个zipapp,但是我不知道如何从应用程序中获取到库的路径。目录树是:

代码语言:javascript
复制
mypackage/
├── __init__.py
├── __main__.py
└── lib
    └── libmylyb.so

__main__.py是:

代码语言:javascript
复制
#!/usr/bin/env python3
from ctypes import *
h = cdll.LoadLibrary("./lib/libmylib.so")
...

我通过以下操作创建zipapp:

代码语言:javascript
复制
python3 -m zipapp mypackage

但是当我尝试执行它时,我会得到一个错误,因为找不到上面的库。

我知道pkgutil.get_data可以用来读取文件内容,我想我可以读取库二进制数据,将其写入临时文件并加载它,但是是否有更好的方法来做我想做的事情呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-06 13:37:29

zipapp不支持编译后的二进制文件,只支持python代码。您可以将.pyd、.so和.dll文件打包到应用程序的文件中,但除非将它们解压缩到文件系统中,否则将无法使用它们。

如果您需要在不解压缩的情况下运行它,您将发现PyInstaller、py2exe、py2app、Nuitka等工具可以做到这一点。

我偶然发现了这个应用程序,它提供了您需要的功能,或者至少帮助zipapp实现了它:https://github.com/ClericPy/zipapps

还有https://shiv.readthedocs.io/en/latest/

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

https://stackoverflow.com/questions/62235796

复制
相关文章

相似问题

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