簡體   English   中英

使用CMake查找python site-packages目錄

[英]Finding python site-packages directory with CMake

我使用CMake構建我的應用程序。 如何找到python site-packages目錄所在的位置? 我需要路徑才能編譯擴展到python。

當我計划在Linux,Mac和Windows上部署我的應用程序時,CMake必須能夠在所有三個主要操作系統上找到路徑。

我試過用

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調用它?

解:

謝謝,亞歷克斯。 那么給我網站包目錄的命令是:

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命令來刪除尾隨的新行。

您可以使用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)

如果您將此擴展名作為動態庫,我建議使用get_python_lib(True) 如果你需要特定於平台的位置,那么第一個參數應該是真的(在64位linux機器中,這可能是/usr/lib64而不是/usr/lib

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM