使用依赖于共享库的 pybind11 扩展打包 python 模块

问题描述 投票:0回答:1

我使用 pybind11 创建到名为 Piper-phonemize 的 C++ 库的跨平台绑定。 该库依赖于 2 个本机库 - onnxruntime 和 espeak-ng。 有 cmake 文件可以生成所需的共享库。 但是,我找不到在 Windows/Linux/macOS 中包含这些共享库的简单方法。

我使用 pyproject.toml 和 setup.py

我想将本机 pybind11 扩展与共享库一起放置在包文件夹中。有没有一种简单的方法来包含它们,以便在导入扩展后扩展能够加载它们?

谢谢

python pypi python-packaging pybind11 python-wheel
1个回答
0
投票

如果我们使用Windows 11(我的情况),要实现这一目标,您可以先安装必要的工具,例如CMake:https://cmake.org/download/(这可以让您运行CMake的GUI) https://cmake.org/cmake/help/book/mastering-cmake/chapter/Getting%20Started.html#running-the-cmake-gui

使用 pybind11 库将需要 setuptools 构建脚本和来自 CMD 的构建命令,我的文件结构如下:

enter image description here

python s\pythoncompilation.py build

为了避免源代码出现错误,我添加了脚本的完整路径,尽管如此,python3.8 安装之前已经专门安装了 pybind11 库(不是全局安装): enter image description here

最后使用 python setuptools 并构建库:

#pythoncompilation.py
from setuptools import setup, Extension
from pybind11.setup_helpers import Pybind11Extension, build_ext

ext_modules = [
    Pybind11Extension("mylib1", ["C:\\Users\\jbsid\\AppData\\Local\\Programs\\Python\\Python38\\s\\mylib1.cpp"]),
    Pybind11Extension("mylib2", ["C:\\Users\\jbsid\\AppData\\Local\\Programs\\Python\\Python38\\s\\mylib2.cpp"]),
]

setup(
    name="mylibs",
    version="0.0.1",
    ext_modules=ext_modules,
    cmdclass={"build_ext": build_ext},
)

最终结果: enter image description here

您也可以使用 CMake GUI 为 Visual Studio 生成项目: enter image description here

如果您使用 CMake GUI 执行此操作,则可以使用此列表 CMake 作为参考:

cmake_minimum_required(VERSION 3.4)
project(mylibs)

cmake_policy(SET CMP0148 NEW)


set(pybind11_DIR "C:/Users/jbsid/AppData/Local/Programs/Python/Python38/Lib/site-packages/pybind11/share/cmake/pybind11")

find_package(pybind11 REQUIRED)


#add_subdirectory(pybind11)
pybind11_add_module(mylib1 mylib1.cpp)
pybind11_add_module(mylib2 mylib2.cpp)

结果(要包含所有内容,您可以使用 PyInstaller 或类似工具创建 setup.py 或包): enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.