【问题标题】:cmake Python: Cannot use the interpretercmake Python:无法使用解释器
【发布时间】:2020-11-01 13:34:23
【问题描述】:

我正在使用 cmake 的 find_package 来定位 Python3,如下所示:

find_package(Python3 REQUIRED COMPONENTS Interpreter)

这适用于我的本地系统,但在我们的 CI 上,它在某些运行时失败(一次是 Linux,一次是带有 MXE 的 Linux)它会出错

Could NOT find Python3 (missing: Python3_EXECUTABLE Interpreter)

Reason given by package: 

    Interpreter: Cannot use the interpreter "/opt/pyenv/shims/python3.8"

如果我直接使用python3 来调用我的脚本,它可以在相同的系统上工作。因此,我可以肯定地说他们确实有一个可以工作的 Python 环境。

我想知道find_package 执行了什么样的检查导致它相信解释器没有工作。最重要的是:如何禁用这些检查?


注意:我不能简单地依赖 Python 在 PATH 中,因为这个假设在我们的 Windows CI 中被打破,find_package 方法可以正常工作。

注意 2:我使用的是最新的 cmake 版本(来自 Kitware 的 PPA)

【问题讨论】:

  • @34563578345 不幸的是我还没有找到解决这个问题的方法。
  • @34563578345 你有什么东西要注释掉?你碰巧有一个可公开访问的差异链接或类似的东西吗?
  • 所以你根本没有执行任何 find_package 魔法?这对我来说并不适用于所有平台。例如在 Windows 上,这会破坏 iirc
  • 好吧,如果你不使用find_package,我假设你依赖python解释器在PATH中,在我的情况下,我们的Windows CI似乎不是这种情况。

标签: python cmake


【解决方案1】:

虽然我仍然不知道为什么 find_package 发出了这个特殊错误,但我能够通过使用一个定位 Python 解释器的自写函数来规避它,并且这样做它更喜欢在 PATH 或其他标准目录中找到的可执行文件。

该脚本可在https://github.com/Krzmbrzl/FindPythonInterpreter 获得(包括使用说明)。

简而言之,这让我可以使用以下 sn-p 来查找 Python 3 解释器:

find_python_interpreter(
    VERSION 3
    INTERPRETER_OUT_VAR PYTHON_INTERPRETER
    REQUIRED
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多