문제

CMAKE를 사용하여 응용 프로그램을 작성합니다. Python Site-Packages 디렉토리가 위치한 위치를 어떻게 찾을 수 있습니까? 파이썬으로 확장을 컴파일하려면 경로가 필요합니다.

Cmake는 Linux, Mac 및 Windows에 응용 프로그램을 배포 할 계획이므로 세 가지 주요 OS에서 경로를 찾을 수 있어야합니다.

나는 사용을 시도했다

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()"

쉘에서는 CMAKE에서 어떻게 호출할까요?

해결책:

고마워요, 알렉스. 따라서 사이트 패키지 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 명령이 필요합니다.

도움이 되었습니까?

해결책

CMAKE에서 외부 프로세스를 실행할 수 있습니다 execute_process (필요한 경우 여기에있는 것처럼 출력을 변수로 가져옵니다).

다른 팁

내가 사용한 약간 업데이트 된 버전 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 비트 리눅스 머신에서) /usr/lib64 대신에 /usr/lib)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top