我安装了2个版本的python,但是cmake使用的是旧版本。如何强制cmake使用新版本?

时间:2013-03-08 10:12:28

标签: python python-2.7 cmake

我安装了2个版本的python,但 cmake 使用的是旧版本。如何强制 cmake 使用新版本?

5 个答案:

答案 0 :(得分:34)

您可以根据需要尝试其中任何一种:

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

请参阅:CMake docs

答案 1 :(得分:25)

我遇到了类似的问题,并使用Paul's answer作为提示进行了解决。我需要使用python2.7来编译一个较旧的库,但cmake不断提取我的python3.2库(和可执行文件)。

首先,我使用默认选项运行cmake,然后编辑它生成的CMakeCache.txt文件。我这样做主要是因为我不知道正确的-D...咒语导致cmake获取python库并首先包含路径等。

在我的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.2替换python2.7的每一次出现。我还必须重命名PYTHON_EXECUTABLE以使用python2.7,因为python是我系统上python3.2的符号链接。

然后我重新cmake。因为它更喜欢它的缓存值来实际查找库,所以这应该适用于所有情况。至少,它确实在我的。

答案 2 :(得分:23)

尝试添加-DPYTHON_EXECUTABLE:FILEPATH=/path/to/python2.7 这可能是一个路径问题?

还可以指定python库的路径,使用您想要的版本:

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

答案 3 :(得分:6)

我使用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

答案 4 :(得分:0)

我的用例是一个相当大的项目,其中C ++类通过Boost.Python提供给Python脚本。在与CMake的Python解释器和库检测的各种怪癖进行了斗争后,我终于放弃并推出了自己的。我的方法是基于稍后编辑的python-config脚本版本,有时(但并非总是!)放入新创建的虚拟环境(see this SO post on pyvenv中问题,但我离题了)。此脚本由小型CMake代码段pyconfig.cmake调用。两者都可以从GitHub回购cmake-python-config免费获得。

警告:脚本假设您的PATH中有一个Python 3解释器。不尝试检测Python 2。这些脚本试图找到所有安装的Python3版本。