python - 如何使用 CMake 查找 Python 解释器和库的最低版本
问题描述
我正在使用 pybind11 和 CMake 构建一个 C 扩展。我曾经这样做过:
find_package(Python3 3.7 REQUIRED)
find_package(PythonLibs 3.7 REQUIRED)
没有任何问题。现在我需要 python 3.8 并将其更改为:
find_package(PythonInterp 3.8 REQUIRED)
find_package(PythonLibs 3.8 REQUIRED)
但是,尽管 libpython3.8.so 与 libpython3.7m.so 位于同一文件夹中,但 CMake 找不到它。它返回:
Could NOT find PythonLibs: Found unsuitable version "3.7.5", but required
is at least "3.8" (found /usr/lib/x86_64-linux-gnu/libpython3.7m.so)
在研究这个时,我注意到 PytonInterp 和 PythonLibs 已被弃用,因为 CMake 3.12 和 FindPython 是首选。所以我尝试了:
find_package(Python3)
这会找到我的 python 3.8 解释器,但不是我的 python 3.8 库。因此,我仍然无法使用该软件包,因为
mypy.cpython-37m-x86_64-linux-gnu.so
基于 python 3.7 库。如何确保它也能找到我的 3.8 库?如前所述,它们位于同一个文件夹中。
解决方案
FindPython模块的文档指出:
如果没有
COMPONENTS
指定,Interpreter
则假定。
所以,是的,因为您没有指定 any COMPONENTS
,所以只找到解释器。
如果您希望 CMake 查找 Python包含目录和库,您应该指定Development
:
find_package(Python3 COMPONENTS Interpreter Development)
推荐阅读
- mysql - MySQL每天在特定时间崩溃
- html - 如何正确定义字体大小
- mysql - 在将 node.js 连接到 mysql 时获取 ER_NOT_SUPPORTED_AUTH_CODE
- reactjs - ReactJS 在渲染函数中传递不同的属性集
- discord.py - 如何将音频文件上传到文本频道
- python - Python在读取文件时替换行中的字符?
- python - Snakemake:不解析输入中的通配符
- python - Python 网页抓取 Asos 错误的问题
- c++ - 为 Edge TPU 构建 TensorFlow Lite 失败
- asp.net - 无法读取配置节“安全”,因为它缺少节声明