【发布时间】:2021-08-05 10:25:06
【问题描述】:
我有一个包需要 a.so,它加载 b.so 并通过 ctypes.cdll.LoadLibrary(a_so_path) 加载它。
所以我必须将它们与我的包裹一起运送。
这里有两个想法。
- 将
LD_LIBRARY_PATH设置为我的站点包
现在的问题是,如何在运行时更改 lib 加载路径,在我的模块中设置 LD_LIBRARY_PATH 将不起作用(参考 Set LD_LIBRARY_PATH before importing in python)。但它是一个包,我不能让每个用户在将LD_LIBRARY_PATH 设置为***/lib/python3.8/site-packages/mypackage/lib/ 的shell 脚本中加载python。
- 安装
*.so到系统库
我在setup.cfg 中发现data_files 可以从站点包中分发文件(到/usr/lib 可以在哪里找到)。但不幸的是,它不支持 egg 或 wheel 包。见https://packaging.python.org/guides/distributing-packages-using-setuptools/#id55
那么,发布我的包的正确方法是什么?
【问题讨论】:
-
我相信你想建立一个wheel。
-
@chepner,我已经造了一个轮子,但是我应该把so文件放在哪里?我的包的根目录?
-
我的印象是共享库包含在 轮子中,而
pip会负责为您正确安装轮子。 -
或者您是在问它们应该安装在车轮内的哪个位置?
-
您可以在
setup函数中包含package_data选项,以指定您要随附的文件。 setuptools.readthedocs.io/en/latest/userguide/…。您可以使用importlib.resources或pkg_resources模块来查找包中文件的位置。
标签: python