16

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

Linux、Mac、Windowsにアプリケーションをデプロイする予定なので、CMakeは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からどのように呼び出すのですか?

解決:

ありがとう、アレックス。したがって、site-packagedirを取得するコマンドは次のとおりです。

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コマンドが必要です。

4

4 に答える 4

8

execute_processを使用してcmakeで外部プロセスを実行できます(必要に応じて、ここにあるように、出力を変数に入れます)。

于 2009-08-07T05:06:40.543 に答える
8

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ます。)

于 2016-10-12T18:52:08.857 に答える
6

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)
于 2018-09-18T11:58:03.110 に答える
1

get_python_lib(True)この拡張機能をダイナミックライブラリとして作成する場合は、使用することをお勧めします。/usr/lib64プラットフォーム固有の場所が必要な場合は、この最初のパラメーターをtrueにする必要があります(64ビットLinuxマシンでは、代わりにこれを使用できます/usr/lib) 。

于 2010-03-29T15:34:01.620 に答える