[Python] Generate Python wheels with conan

Discussão em 'Python' iniciado por Stack, Agosto 4, 2025.

  1. Stack

    Stack Membro Participativo

    I want to generate Python wheels for my project (the last step before to put them on PyPI). I use conan for that. CMake found system dependencies but not conan dependencies for Ceres, Eigen and pybind11, and also MSYS2 includes.

    Here is conanfile.txt:

    [requires]
    ceres-solver/2.1.0
    eigen/3.4.0
    zlib/1.2.13
    libcurl/8.6.0
    pybind11/2.12.0

    [generators]
    CMakeToolchain
    CMakeDeps

    [options]
    ceres-solver/2.1.0:shared=False
    ceres-solver/2.1.0:use_glog=False
    libcurl/8.6.0:with_ssl=openssl
    libcurl/8.6.0:with_zlib=True
    libcurl/8.6.0:shared=False


    The command output is:

    d:\Programmes\msys64\home\Julien\symreg_ws\SymReg>cd build_conan

    d:\Programmes\msys64\home\Julien\symreg_ws\SymReg\build_conan>conan install .. --build=missing

    ======== Input profiles ========
    Profile host:
    [settings]
    arch=x86_64
    build_type=Release
    compiler=msvc
    compiler.cppstd=14
    compiler.runtime=dynamic
    compiler.runtime_type=Release
    compiler.version=194
    os=Windows

    Profile build:
    [settings]
    arch=x86_64
    build_type=Release
    compiler=msvc
    compiler.cppstd=14
    compiler.runtime=dynamic
    compiler.runtime_type=Release
    compiler.version=194
    os=Windows


    ======== Computing dependency graph ========
    Graph root
    conanfile.txt: d:\Programmes\msys64\home\Julien\symreg_ws\SymReg\conanfile.txt
    Requirements
    ceres-solver/2.1.0#61809d7baf47aeb1a0a82472ba2283d0 - Cache
    eigen/3.4.0#2e192482a8acff96fe34766adca2b24c - Cache
    libcurl/8.6.0#1daf20281d5c28d4999ecde631e15790 - Cache
    openssl/3.5.1#7884fb47cae4130ac03814e53e3c7167 - Cache
    pybind11/2.12.0#ea1de6fefd9c0c745e2b30e60dd23bfa - Cache
    zlib/1.2.13#9df41c65e2c2b6ef47633dc32e0b699a - Cache
    Build requirements
    nasm/2.16.01#31e26f2ee3c4346ecd347911bd126904 - Cache
    strawberryperl/5.32.1.1#8d114504d172cfea8ea1662d09b6333e - Cache
    Resolved version ranges
    openssl/[>=1.1 <4]: openssl/3.5.1

    ======== Computing necessary packages ========
    Connecting to remote 'conancenter' anonymously
    zlib/1.2.13: Main binary package '0d6dd492a7d31822b2f2686ec67bbaef586416a3' missing
    zlib/1.2.13: Checking 1 compatible configurations
    zlib/1.2.13: Found compatible package '7bfde258ff4f62f75668d0896dbddedaa7480a0f': compiler.version=193
    ceres-solver/2.1.0: Main binary package '44419d077b4887d6d4f6924e3ecd8c57e9cffe84' missing
    ceres-solver/2.1.0: Checking 7 compatible configurations
    ceres-solver/2.1.0: Found compatible package 'cab6b52ecb1cf2dcf7189e655879e8c802561369': compiler.version=193
    Requirements
    ceres-solver/2.1.0#61809d7baf47aeb1a0a82472ba2283d0:cab6b52ecb1cf2dcf7189e655879e8c802561369#421d2a33e32bd11f2ee89892cb68e8ba - Cache
    eigen/3.4.0#2e192482a8acff96fe34766adca2b24c:da39a3ee5e6b4b0d3255bfef95601890afd80709#b2e7c2d86c5d1dbefc534889aa72e12c - Cache
    libcurl/8.6.0#1daf20281d5c28d4999ecde631e15790:64f76b680a223ce0061500e564b2b35f8d9884bf#1531fc7604889978430f77ec01b4bd6f - Cache
    openssl/3.5.1#7884fb47cae4130ac03814e53e3c7167:8a4e0dce57bcc1cce0e82875de79e2efc69d4cb8#d28ab3add0e5a1b78eafd74ede2fd2e3 - Cache
    pybind11/2.12.0#ea1de6fefd9c0c745e2b30e60dd23bfa:da39a3ee5e6b4b0d3255bfef95601890afd80709#8b620527f1fc5738a168e12326b606fb - Cache
    zlib/1.2.13#9df41c65e2c2b6ef47633dc32e0b699a:7bfde258ff4f62f75668d0896dbddedaa7480a0f#a4a942c3c35bb1282dfc546b6ac1de88 - Cache
    Build requirements
    Skipped binaries
    nasm/2.16.01, strawberryperl/5.32.1.1

    ======== Installing packages ========
    eigen/3.4.0: Already installed! (1 of 6)
    pybind11/2.12.0: Already installed! (2 of 6)
    zlib/1.2.13: Already installed! (3 of 6)
    ceres-solver/2.1.0: Already installed! (4 of 6)
    openssl/3.5.1: Already installed! (5 of 6)
    libcurl/8.6.0: Already installed! (6 of 6)
    WARN: deprecated: Usage of deprecated Conan 1.X features that will be removed in Conan 2.X:
    WARN: deprecated: 'cpp_info.names' used in: eigen/3.4.0, ceres-solver/2.1.0, zlib/1.2.13
    WARN: deprecated: 'cpp_info.build_modules' used in: ceres-solver/2.1.0

    ======== Finalizing install (deploy, generators) ========
    conanfile.txt: Writing generators to d:\Programmes\msys64\home\Julien\symreg_ws\SymReg
    conanfile.txt: Generator 'CMakeToolchain' calling 'generate()'
    conanfile.txt: CMakeToolchain generated: conan_toolchain.cmake
    conanfile.txt: CMakeToolchain: Preset 'conan-default' added to CMakePresets.json.
    (cmake>=3.23) cmake --preset conan-default
    (cmake<3.23) cmake <path> -G "Visual Studio 17 2022" -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW
    conanfile.txt: CMakeToolchain generated: d:\Programmes\msys64\home\Julien\symreg_ws\SymReg\CMakePresets.json
    conanfile.txt: Generator 'CMakeDeps' calling 'generate()'
    conanfile.txt: CMakeDeps necessary find_package() and targets for your CMakeLists.txt
    find_package(Ceres)
    find_package(Eigen3)
    find_package(CURL)
    find_package(ZLIB)
    find_package(pybind11)
    target_link_libraries(... Ceres::ceres Eigen3::Eigen CURL::libcurl ZLIB::ZLIB pybind11_all_do_not_use)
    conanfile.txt: Generating aggregated env files
    conanfile.txt: Generated aggregated env files: ['conanbuild.bat', 'conanrun.bat']
    Install finished successfully

    d:\Programmes\msys64\home\Julien\symreg_ws\SymReg\build_conan>cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake
    -- Using Conan toolchain: D:/Programmes/msys64/home/Julien/symreg_ws/SymReg/conan_toolchain.cmake
    -- Conan toolchain: CMAKE_GENERATOR_TOOLSET=v143
    -- Conan toolchain: Setting CMAKE_MSVC_RUNTIME_LIBRARY=$<$<CONFIG:Release>:MultiThreadedDLL>
    -- Conan toolchain: C++ Standard 14 with extensions OFF
    -- Selecting Windows SDK version 10.0.26100.0 to target Windows 10.0.19045.
    -- Found required Ceres dependency: absl version 20250127 in C:/Program Files (x86)/Ceres/lib/cmake/absl
    -- Found required Ceres dependency: Eigen version 3.4.90 in D:/Programmes/eigen-master/build
    -- Found Ceres version: 2.3.0 installed in: C:/Program Files (x86)/Ceres with components: [EigenSparse, SparseLinearAlgebraLibrary, SchurSpecializations]
    -- Found pybind11: D:/Programmes/msys64/ucrt64/include (found version "2.13.6")
    -- Warning: Standard CMAKE_CXX_STANDARD value defined in conan_toolchain.cmake to 14 has been modified to 23 by D:/Programmes/msys64/home/Julien/symreg_ws/SymReg/CMakeLists.txt
    -- Found Python3: D:/Programmes/Python/Python312/python.exe (found version "3.12.4") found components: Interpreter
    -- Found required Ceres dependency: absl version 20250127 in C:/Program Files (x86)/Ceres/lib/cmake/absl
    -- Found required Ceres dependency: Eigen version 3.4.90 in D:/Programmes/eigen-master/build
    -- Found Ceres version: 2.3.0 installed in: C:/Program Files (x86)/Ceres with components: [EigenSparse, SparseLinearAlgebraLibrary, SchurSpecializations]
    -- Conan: Target declared 'ZLIB::ZLIB'
    -- Could NOT find WrapVulkanHeaders (missing: Vulkan_INCLUDE_DIR)
    -- Could NOT find WrapVulkanHeaders (missing: Vulkan_INCLUDE_DIR)
    -- Found Python3: D:/Programmes/Python/Python312/python.exe (found version "3.12.4") found components: Interpreter Development Development.Module Development.Embed
    -- Configuring done (4.4s)
    -- Generating done (0.6s)
    -- Build files have been written to: D:/Programmes/msys64/home/Julien/symreg_ws/SymReg/build_conan

    d:\Programmes\msys64\home\Julien\symreg_ws\SymReg\build_conan>cmake --build . --config Release
    Version MSBuild 17.12.12+1cce77968 pour .NET Framework

    1>Checking Build System
    Automatic MOC for target symreg
    Building Custom Rule D:/Programmes/msys64/home/Julien/symreg_ws/SymReg/CMakeLists.txt
    python_bindings.cpp
    mocs_compilation_Release.cpp
    D:\Programmes\msys64\ucrt64\include\stdio.h(184,64): error C2144: erreur de syntaxe : 'int' doit être précédé de ';' [D
    :\Programmes\msys64\home\Julien\symreg_ws\SymReg\build_conan\symreg.vcxproj]
    (compiler le fichier source '../src/python_bindings.cpp')
    ...


    Here is CMakeLists.txt:

    cmake_minimum_required(VERSION 3.10)
    cmake_policy(SET CMP0091 NEW)
    project(SymReg)

    find_package(Ceres REQUIRED CONFIG)
    set(PYBIND11_FINDPYTHON ON)
    find_package(pybind11 REQUIRED CONFIG)

    set(CMAKE_BUILD_TYPE Release)
    #set(CMAKE_BUILD_TYPE Debug)

    if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
    add_compile_options(
    -march=native
    # -O3 -ffast-math -DNDEBUG
    # -fsanitize=address,undefined -g -O1
    )
    endif()

    set(CMAKE_CXX_STANDARD 23)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)

    include(FetchContent)
    FetchContent_Declare(
    googletest
    GIT_REPOSITORY https://github.com/google/googletest.git
    GIT_TAG v1.14.0
    )
    FetchContent_MakeAvailable(googletest)

    find_package(Ceres REQUIRED)
    find_package(CURL REQUIRED)
    find_package(Qt6 REQUIRED COMPONENTS Widgets Charts Svg)
    find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
    find_package(pybind11 REQUIRED)
    find_package(Sym REQUIRED)

    include_directories(include)

    add_compile_definitions(EIGEN_NO_DEBUG)

    set(CMAKE_AUTOMOC ON)

    add_definitions(-DPYBIND11_DETAILED_ERROR_MESSAGES)
    pybind11_add_module(symreg src/python_bindings.cpp)

    if (WIN32)
    target_link_libraries(symreg PRIVATE Ceres::ceres Sym::Sym Ws2_32)
    else()
    target_link_libraries(symreg PRIVATE Ceres::ceres Sym::Sym)
    endif()

    add_executable(primes_demo src/primes_demo.cpp)

    if (WIN32)
    target_link_libraries(primes_demo
    ${MLPACK_LIBRARIES}
    # asan ubsan
    pybind11::embed Python3::python
    Ceres::ceres Qt6::Widgets Qt6::Charts Qt6::Svg gvc cgraph Sym::Sym Ws2_32)
    else()
    target_link_libraries(primes_demo
    ${MLPACK_LIBRARIES}
    # asan ubsan
    pybind11::embed Python3::python
    Ceres::ceres Qt6::Widgets Qt6::Charts Qt6::Svg gvc cgraph Sym::Sym)
    endif()

    add_executable(benchmark src/benchmark.cpp)

    if (WIN32)
    target_link_libraries(benchmark
    # asan ubsan
    pybind11::embed Python3::python
    Ceres::ceres CURL::libcurl Sym::Sym Ws2_32)
    else()
    target_link_libraries(benchmark
    # asan ubsan
    pybind11::embed Python3::python
    Ceres::ceres CURL::libcurl Sym::Sym)
    endif()

    enable_testing()
    add_executable(test_symreg tests/test_symreg.cpp)

    if (WIN32)
    target_link_libraries(test_symreg
    ${MLPACK_LIBRARIES}
    # asan ubsan
    pybind11::embed Python3::python
    Ceres::ceres CURL::libcurl gtest gtest_main Sym::Sym Ws2_32)
    else()
    target_link_libraries(test_symreg
    ${MLPACK_LIBRARIES}
    # asan ubsan
    pybind11::embed Python3::python
    Ceres::ceres CURL::libcurl gtest gtest_main Sym::Sym)
    endif()

    math(EXPR TIMEOUT "3 * 60 * 60")
    add_test(NAME TestSymReg COMMAND test_symreg)
    set_tests_properties(TestSymReg PROPERTIES TIMEOUT ${TIMEOUT})

    if (WIN32)
    else()
    include(GoogleTest)
    gtest_discover_tests(test_symreg)
    endif()

    install(DIRECTORY include/SymReg DESTINATION include)

    add_library(SymReg INTERFACE)
    target_include_directories(SymReg INTERFACE
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>
    )

    include(CMakePackageConfigHelpers)

    configure_package_config_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/cmake/SymRegConfig.cmake.in
    ${CMAKE_CURRENT_BINARY_DIR}/SymRegConfig.cmake
    INSTALL_DESTINATION lib/cmake/SymReg
    )

    write_basic_package_version_file(
    ${CMAKE_CURRENT_BINARY_DIR}/SymRegConfigVersion.cmake
    VERSION 1.0.0
    COMPATIBILITY SameMajorVersion
    )

    install(FILES
    ${CMAKE_CURRENT_BINARY_DIR}/SymRegConfig.cmake
    ${CMAKE_CURRENT_BINARY_DIR}/SymRegConfigVersion.cmake
    DESTINATION lib/cmake/SymReg
    )

    install(TARGETS SymReg EXPORT SymRegTargets)

    install(EXPORT SymRegTargets
    NAMESPACE SymReg::
    DESTINATION lib/cmake/SymReg
    )


    How can I do to fix the right dependencies? I hope that I put all necessaries files and information.

    Continue reading...

Compartilhe esta Página