【发布时间】:2021-11-20 08:12:34
【问题描述】:
我有一个项目cloudgen,我想为 Python 添加绑定,以便可以访问一些底层函数。我已经完成了最初的工作on a branch。因为主要的可执行文件是用cmake构建的,所以我决定使用scikit-build来管理构建并使用pybind11来处理绑定(following this example repo)。
当我在虚拟环境中运行pip install . 时,一切似乎都按预期工作。我发现可执行文件安装到<prefix>/bin,库进入<prefix>/lib,模块进入<prefix>/lib/pythonX.Y/site-packages/cloudgen。事实上,如果我运行pip uninstall cloudgen,所有正确的文件都会被卸载。但是,当我开始测试 Python 绑定时,我的问题就出现了。我发现了两个独立但相关的问题。
- 如果我安装到 Anaconda 环境中,模块能够解析到共享库的路径并通过测试,但可执行文件无法解析到库的路径。
- 另一方面,如果我使用
python -m venv安装到虚拟环境中,模块和可执行文件都无法解析到共享库的路径。
四处搜索,我发现了this question,其中指出我可以操纵LD_LIBRARY_PATH(或在macOS 上相当于DYLD_LIBRARY_PATH,在Windows 上相当于PATH),但is normally frowned upon。该问题引用了an open issue,它指的是包括其他构建产品(正如我所说,这似乎不是我的问题),但没有解决库路径解析问题。我还遇到了this question 询问有关使用 scikit-build 分发构建产品和this question 直接使用 setuptools 的问题。这些问题或答案都没有解决库路径解析问题。
我的问题是:分发包含可执行文件、共享库和 Python 绑定模块并具有路径解析 Just Work™ 的包的正确方法是什么?
一个最小的工作示例有点多,但我created a gist 来演示该行为。
【问题讨论】:
标签: python virtualenv conda scikit-build