[英]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_SITELIB
和Python_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.