web-dev-qa-db-ja.com

pythonの2つのバージョンがインストールされていますが、cmakeは古いバージョンを使用しています。cmakeに新しいバージョンを使用させるにはどうすればよいですか?

pythonの2つのバージョンがインストールされていますが、cmakeは古いバージョンを使用しています。cmakeを強制して新しいバージョンを使用するにはどうすればよいですか?

48
Sanjeev

必要に応じて、次のいずれかを試してください。

find_package( PythonInterp 2.7 REQUIRED )
find_package( PythonLibs 2.7 REQUIRED )

参照: CMake docs

35
jadelord

-DPYTHON_EXECUTABLE:FILEPATH=/path/to/python2.7を追加してみてください。パスに問題がある可能性がありますか?

また、pythonライブラリへのパスを指定し、必要なバージョンを使用できます。

 cmake -DPYTHON_LIBRARIES=/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib .
26
Paul

同様の問題があり、ヒントとして Paulの答え を使用して解決しました。古いライブラリをコンパイルするにはpython2.7を使用する必要がありましたが、cmakepython3.2ライブラリ(および実行可能ファイル)を取得し続けます。

最初に、cmakeをデフォルトのオプションで実行し、次に生成されたCMakeCache.txtファイルを編集しました。主にcmakeがpythonライブラリを取得してパスなどを含むようにする適切な-D...呪文を知らなかったため、この方法でした。最初の場所。

CmakeCache.txtで、次のような行を見つけました

  • プログラムへのパス

    PYTHON_EXECUTABLE:FILEPATH=/usr/bin/python
    
  • ディレクトリへのパス

    PYTHON_INCLUDE_DIR:PATH=/usr/include/python3.2
    
  • ライブラリへのパス

    PYTHON_LIBRARY:FILEPATH=/usr/lib/libpython3.2.so
    

そして、すべてのpython3.2python2.7に置き換えました。 pythonはシステム上のPYTHON_EXECUTABLEへのシンボリックリンクであるため、python2.7を使用するようにpython3.2の名前も変更する必要がありました。

その後、cmakeを再実行しました。ライブラリを実際に検索するよりもキャッシュされた値を好むため、これはすべての場合に機能するはずです。少なくとも、それは私のものでした。

26
jpaugh

私はanaconda(python 2.7.8)とpython 2.7.6。

私は試した -DPYTHON_EXECUTABLE:FILEPATH=$ANACONDA_HOME/binが、バージョン1.4が見つかりました(変:)。

私のソリューションはそれをPYTHON_EXECUTABLEに変更しています:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TIFF=ON \
-DPYTHON_LIBRARY=$ANACONDA_HOME/lib/libpython2.7.so \
-DPYTHON_INCLUDE_DIR=$ANACONDA_HOME/include/python2.7/ \
-DPYTHON_EXECUTABLE=$ANACONDA_HOME/bin/python
6
X.H. Jiang

私のユースケースは、C++クラスをPythonスクリプトを使用してBoost.Python。 CMakeのPythonインタープリターとライブラリ検出のさまざまな癖と戦った後、私は最終的にあきらめ、自分のものをロールバックしました。私のアプローチはpython-configスクリプトは、sometimes(ただし常にではありません!)新しく作成された仮想環境に配置されます( これを参照SO上の投稿pyvenv これらの問題についてですが、私は脱線します)このスクリプトは、小さなCMakeスニペットpyconfig.cmake。どちらもGitHubリポジトリ cmake-python-config から無料で入手できます。

警告:スクリプトは、PATHにPython 3インタープリターがあることを前提としています。Python 2の検出は試行されていません。 notPython3のインストール済みバージョンのいずれかallを見つけようとします。

1
Laryx Decidua