質問

私は自分のアプリケーションを構築するためにCMakeのを使用しています。どのように私はPythonのsite-packagesディレクトリが配置されている場所を見つけることができますか?私は、Pythonの拡張機能をコンパイルするためにパスを必要としています。

CMakeのは、私は、Linux、MacとWindows上で自分のアプリケーションを展開することを計画してすべての3つの主要な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のから呼び出すことでしょうか?

SOLUTIONます:

おかげで、アレックス。 だから、私のサイトのパッケージディレクトリを与えるコマンドがあります:

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コマンドは末尾の改行を削除するために必要とされます。

他のヒント

:私は
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以来、あなたはPython_SITELIBを移入 FindPython のモジュールを使用することができますそれぞれ、アーキテクチャに依存しないと、特定のライブラリのための変数を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帰属
所属していません StackOverflow
scroll top