【问题标题】:I have 2 versions of python installed, but cmake is using older version. How do I force cmake to use the newer version?我安装了 2 个版本的 python,但 cmake 使用的是旧版本。如何强制 cmake 使用较新的版本?
【发布时间】:2013-02-23 20:24:18
【问题描述】:

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

【问题讨论】:

    标签: python python-2.7 cmake


    【解决方案1】:

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

    对于CMake >= 3.12

    根据更新日志:

    新的“FindPython3”和“FindPython2”模块,以及一个新的
    已添加“FindPython”模块以提供一种新的定位方式
    python环境。

    find_package(Python COMPONENTS Interpreter Development)
    

    Docs:

    这个模块看起来更适合 Python 版本 3。如果没有找到, 版本 2 被搜索。管理并发版本 3 和 2 Python,使用 FindPython3 和 FindPython2 模块而不是这个。

    对于CMake < 3.12

    Docs:

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

    【讨论】:

    • 工作得很好,也使用 Travis。
    • 这么简单...我觉得自己很笨。
    • 也适用于在用户主目录中安装了 Conda 的 python 3.6!
    • 等等,我不明白这个,你怎么用这个?比如我可以在命令行中使用的命令是什么?
    • @Tarun 它进入 CMakeLists.txt 并且 cmake 是命令,这里是 more complete example
    【解决方案2】:

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

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

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

    【讨论】:

    • 请注意,至少对于 Ubuntu 16.04 上的 cmake 2.8,您需要设置 -DPYTHON_LIBRARY 而不是 -DPYTHON_LIBRARIES
    【解决方案3】:

    我遇到了类似的问题,并使用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。因为它更喜欢它的缓存值而不是实际查找库,所以这应该适用于所有情况。至少,在我身上是这样的。

    【讨论】:

    • 这对我有用。提供 cmake 环境变量不起作用。编辑 CmakeCache 文件确实如此。无论如何都更容易使用
    【解决方案4】:

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

    【讨论】:

    • 特别是对于 anaconda,这对我有用(并且希望更容易概括):github.com/jkhoogland/FindPythonAnaconda(尽管我必须做两个小改动——如果上游,它们都在我的 GitHub 分支中也不适合你)
    【解决方案5】:

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

    警告:脚本假定您的 PATH 中有 Python 3 解释器。未尝试检测 Python 2。脚本也尝试查找所有已安装的 Python3 版本。

    【讨论】:

      猜你喜欢
      • 2015-07-03
      • 2019-12-24
      • 2013-04-29
      • 1970-01-01
      • 2020-09-05
      • 2018-12-08
      • 2018-09-26
      • 1970-01-01
      相关资源
      最近更新 更多