我使用 pybind11 创建到名为 Piper-phonemize 的 C++ 库的跨平台绑定。 该库依赖于 2 个本机库 - onnxruntime 和 espeak-ng。 有 cmake 文件可以生成所需的共享库。 但是,我找不到在 Windows/Linux/macOS 中包含这些共享库的简单方法。
我使用 pyproject.toml 和 setup.py
我想将本机 pybind11 扩展与共享库一起放置在包文件夹中。有没有一种简单的方法来包含它们,以便在导入扩展后扩展能够加载它们?
谢谢
如果我们使用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 的构建命令,我的文件结构如下:
python s\pythoncompilation.py build
为了避免源代码出现错误,我添加了脚本的完整路径,尽管如此,python3.8 安装之前已经专门安装了 pybind11 库(不是全局安装):
最后使用 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},
)
您也可以使用 CMake GUI 为 Visual Studio 生成项目:
如果您使用 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)