📌  相关文章
📜  没有名为 'skbuild' opencv 的模块 (1)

📅  最后修改于: 2023-12-03 15:11:04.025000             🧑  作者: Mango

没有名为 'skbuild' opencv 的模块

当你在使用 OpenCV 的时候,出现了 "没有名为 'skbuild' opencv 的模块" 错误,通常是因为缺少 "scikit-build" 库。

什么是 scikit-build

scikit-build 是一个用于构建 Python C/C++ 扩展的工具集合,它使用 CMake 作为底层构建系统,并提供了 CMake 扩展命令来规范化 Python 扩展的构建。

如何安装 scikit-build

你可以使用 pip 来安装 scikit-build:

pip install scikit-build
如何使用 scikit-build

假设你已经有一个 Python 包含 CPython 扩展的项目,并且需要使用 CMake 来构建它,这里有一些基本的步骤:

  1. 配置 setup.py

    在 setup.py 中,你需要添加以下代码:

    from skbuild import setup
    
    setup(
        name="your_package_name",
        version="0.0.0",
        cmake_args=['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=./your_package_name'],
        packages=['your_package_name']
    )
    

    这样可以确保在执行构建操作时正确地运行 CMake。

  2. 配置 setup.cfg

    在 setup.cfg 中,你需要添加以下代码:

    [build_ext]
    # 排除不需要编译的文件
    exclude = *.c, *.cython, *.pyx
    # 使用 scikit-build 构建
    # 参数 -j 表示使用并行化编译
    builder = scikit-build -j4
    # 指向 CMakeLists.txt 目录
    cmake_sources = your_package_name
    
  3. 配置 CMakeLists.txt

    在 CMakeLists.txt 中,你需要编写以下代码:

    cmake_minimum_required(VERSION 3.13)
    project(your_package_name VERSION 0.1.0)
    
    find_package(OpenCV REQUIRED)
    
    add_library(your_package_name SHARED
        # 将你的 C/C++ 文件列表在这里
        your_package_name_module.cpp
    )
    
    target_include_directories(your_package_name PUBLIC ${OpenCV_INCLUDE_DIRS})
    
    target_link_libraries(your_package_name ${OpenCV_LIBS})
    

    例如,"your_package_name_module.cpp" 是你的 C/C++ 扩展源代码文件。

  4. 编译项目

    现在你可以使用以下命令来编译你的项目:

    python setup.py build
    

    编译后的文件在 your_package_name/build/lib.your_platform/your_package_name 目录下,如果你的构建系统支持建立 Python Wheels,你也可以使用以下命令:

    python setup.py bdist_wheel
    
  5. 安装项目

    编译完成后,你可以将项目安装到你的系统中:

    python setup.py install
    

    或者,如果你使用 Python Wheels 构建项目,你可以使用以下命令:

    pip install ./dist/*.whl
    

以上就是使用 scikit-build 来构建 Python C/C++ 扩展的基本步骤,希望可以帮助到你解决 Opencv 中 "没有名为 'skbuild' opencv 的模块" 的问题。