用CM中的setup.py构建一个python包

2024-04-29 06:17:05 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:这个问题有点太长了。这是我真正的问题:如何在CMake中使用setuptools(setup.py)构建和安装一个python包?下面显示了我的代码的详细信息(但是对于源代码外的构建方法,具有源代码的方法正在工作)。


我有一个项目需要分发我自己的python包。我制作了setup.py脚本,但我想用CMake构建并安装它。

我遵循了Using CMake with setup.py,但它只在setup.py和python文件夹旁边的一个CMakeLists.txt中工作,而不从构建目录执行cmake。

使用此布局:

Project/
--build/
--lib/
----python/
------folder1/
------folder2/
------data/
------...
------__init__.py
----setup.py
----CMakeLists.txt
--CMakeLists.txt

使用CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
add_subdirectory(lib)
(..)

以及lib/CMakeLists.txt:

find_program(PYTHON "python")

if (PYTHON)
    set(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py")
    set(SETUP_PY    "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
    set(DEPS        "${CMAKE_CURRENT_SOURCE_DIR}/python/__init__.py")
    set(OUTPUT      "${CMAKE_CURRENT_BINARY_DIR}/build")

    configure_file(${SETUP_PY_IN} ${SETUP_PY})

    add_custom_command(OUTPUT ${OUTPUT}
                       COMMAND ${PYTHON}
                       ARGS setup.py build
                       DEPENDS ${DEPS})

    add_custom_target(target ALL DEPENDS ${OUTPUT})

    install(CODE "execute_process(COMMAND ${PYTHON} ${SETUP_PY} install)")
endif()

使用setup.py

from setuptools import setup, find_packages

setup(name="python",
    version="xx",
    author="xx",
    packages = find_packages(),
    package_data = {'': ['*.txt']},
    description="Python lib for xx")

当我从build目录运行CMake,然后make时,目标是build,但没有任何内容。好像没有找到包裹。安装程序将安装不带.py文件的python包。


Tags: pybuildtxtcmakeaddoutputlibdir
2条回答

setuptools不知道源代码外的构建,因此找不到任何python源文件(因为您没有将它们复制到binary dir,所以那里似乎只存在setup.py文件)。为了解决这个问题,您必须将python源代码树复制到CMAKE_CURRENT_BINARY_DIR

https://bloerg.net/2012/11/10/cmake-and-distutils.html建议在setup.py中将package_dir设置为${CMAKE_CURRENT_SOURCE_DIR}

相关问题 更多 >