使用CM查找python站点包目录

2024-04-24 11:09:37 发布

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

我使用CMake构建我的应用程序。如何找到python site packages目录的位置?我需要路径来编译python的扩展。

CMake必须能够在所有三个主要操作系统上找到路径,因为我计划在Linux、Mac和Windows上部署我的应用程序。

我试着用

include(FindPythonLibs)
find_path( PYTHON_SITE_PACKAGES site-packages ${PYTHON_INCLUDE_PATH}/.. )

但这不起作用。

我也可以通过跑步获得路径

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

在shell上,但是我如何从CMake调用它呢?

解决方案:

谢谢,亚历克斯。 所以给我site package dir的命令是:

execute_process ( COMMAND python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE)

需要OUTPUT_STRIP_TRAILING_WHITESPACE命令来删除后面的新行。


Tags: fromimport路径cmake应用程序outputgetlib
3条回答

您可以使用execute_process在cmake中执行外部进程(如果需要,可以将输出转换为变量,就像这里一样)。

我用于lcm的稍微更新的版本:

execute_process(
  COMMAND "${PYTHON_EXECUTABLE}" -c "if True:
    from distutils import sysconfig as sc
    print(sc.get_python_lib(prefix='', plat_specific=True))"
  OUTPUT_VARIABLE PYTHON_SITE
  OUTPUT_STRIP_TRAILING_WHITESPACE)

这会将PYTHON_SITE设置为适当的前缀相对路径,适合如下使用:

install(
  FILES ${mypackage_python_files}
  DESTINATION ${PYTHON_SITE}/mypackage)

(请不要安装到绝对路径!这样做会绕过CMAKE_INSTALL_PREFIX。)

由于CMake 3.12,您可以使用FindPython模块分别为独立于体系结构的库和特定库填充Python_SITELIBPython_SITEARCH变量。

示例:

find_package(Python ${PYTHON_VERSION} REQUIRED COMPONENTS Development)
Python_add_library(foo MODULE
    src/foo.cc src/python_interface.cc
)
install(TARGETS foo DESTINATION ${Python_SITEARCH}/foo)

相关问题 更多 >