随手记录 CMake:Could NOT find Python3

前言

其实之前成功过 作死😂... 安装了一下gtest 然后不止为何python3.8就映射过来了,也可能不是gtest的锅,反正就是突然make不成功了,报错内容:
(missing: Python3_INCLUDE_DIRS Python3_LIBRARIES Python3_NumPy_INCLUDE_DIRS Development NumPy Development.Module Development.Embed) (found version "3.8.12")

暂且直接用test_ws 新建workspace 只有一个cmakelist进行测试:

cmake_minimum_required(VERSION 3.16)
find_package(Python3 COMPONENTS NumPy)# 

if (Python3_FOUND)
  message(STATUS "Python3_EXECUTABLE: ${Python3_EXECUTABLE}")
  message(STATUS "_Python3_EXECUTABLE: ${_Python3_EXECUTABLE}\n")
 
  message(STATUS "Python3_INCLUDE_DIR: ${Python3_INCLUDE_DIR}")
  message(STATUS "_Python3_INCLUDE_DIR: ${_Python3_INCLUDE_DIR}\n")
 
  message(STATUS "Python3_LIBRARY_DEBUG: ${Python3_LIBRARY_DEBUG}")
  message(STATUS "_Python3_LIBRARY_DEBUG: ${_Python3_LIBRARY_DEBUG}\n")
 
  message(STATUS "Python3_LIBRARY_RELEASE: ${Python3_LIBRARY_RELEASE}")
  message(STATUS "_Python3_LIBRARY_RELEASE: ${_Python3_LIBRARY_RELEASE}\n")
 
  message(STATUS "Python3_NumPy_INCLUDE_DIR: ${Python3_NumPy_INCLUDE_DIR}")
  message(STATUS "_Python3_NumPy_INCLUDE_DIR: ${_Python3_NumPy_INCLUDE_DIR}\n")
endif()

相关参考链接


  1. cmake 官方文档,有关python3

  2. Cannot import numpy in Python 3.7 or Python 3.8 - Ubuntu 18.04

  3. How to uninstall python 3.8 from Ubuntu after deleting the folder Python-3.8.0 using “rm -rf”?

  4. gtest missing方案

错误示意

相关细节性错误复制,基本全都是这个:

CMake Error at xxx/CMakeLists.txt:51 (add_library):
  Target "xxx" links to target "Python3::Python" but the target was
  not found.  Perhaps a find_package() call is missing for an IMPORTED
  target, or an ALIAS target is missing?

心路历程

都… 这么老油条了 还找了近半个小时的解法

  1. 首先想到的就是切conda,直接用环境

    然后宣告失败,切完后 有些protobuf,google相关包 路径找不到,摘取错误:

    fatal error: google/protobuf/port_def.inc: No such file or directory
    
  2. 安装numpy

    pip3 install numpy

    宣告失败,走了10分钟才发现哦吼,这个怎么找到了python 3.8.12的版本去了,而我系统的python3是链接到python3.6的所以即使这样做也不能有效

  3. set好路径

    set(Python3_INCLUDE_DIR /usr/include/python3.6)
    set(Python3_LIBRARIES /usr/lib/x86_64-linux-gnu/libpython3.6m.so)
    set(Python3_NumPy_INCLUDE_DIR /usr/lib/python3/dist-packages/numpy/core/include)
    

    失败,因为… Python3 Find那里 并不会根据set的路径找

  4. 直接卸载3.8

    一开始sudo apt remove python-3.8 还不行,非得卸干净了才行(我也不知道为啥我系统上有3.8 正常不走ros我都是conda yyds!!!)

    sudo apt-get -y purge python3.8
    sudo apt-get -y autoremove
    

    随后经过干净的卸载 emmm 然后就找到了

多说一句 记得删除build devel出来的文件夹 再catkin_make

<think>好的,用户现在遇到了CMake配置OpenCV时关于Python检测的警告问题,需要解决。首先,我需要回忆一下CMake在配置OpenCV时常见的Python相关警告。通常,这些警告可能涉及到找不到Python的路径、版本不匹配或者多个Python环境冲突。根据用户提供的引用内容,特别是引用[2]和[3],他们可能在源码安装OpenCV时遇到了问题。 首先,用户可能使用的CMake命令在生成配置时检测到了Python环境的问题,比如找不到Python的可执行文件、头文件或库文件。这种情况下,CMake会发出警告,可能导致后续编译或使用OpenCV时出现问题,尤其是涉及到Python绑定的部分。 接下来,我需要考虑常见的解决方法。根据经验,首先应该明确系统中有哪些Python版本,比如Python2和Python3是否共存。然后,检查CMake的输出日志,看看具体是哪个部分导致的警告。用户可能需要手动指定Python的路径,确保CMake能够正确找到所需的Python版本。 另外,用户提到的find_host_package和find_package可能涉及到OpenCV的CMake脚本中查找Python的方式。在交叉编译的情况下,find_host_package用于查找主机环境的包,而find_package用于目标环境。但普通用户可能在非交叉编译的情况下遇到此问题,可能需要调整CMake参数来正确指定Python路径。 可能的解决方案包括:设置正确的Python_EXECUTABLE、Python_INCLUDE_DIR和Python_LIBRARY变量。例如,在CMake命令中添加-DPython_EXECUTABLE=/usr/bin/python3,以及对应的包含目录和库目录。这可以覆盖CMake自动检测的路径,避免警告。 此外,用户可能安装了多个Python版本,导致CMake混淆。建议使用虚拟环境(如venv或conda)来隔离Python环境,然后在CMake配置时指向虚拟环境中的Python路径。这样可以避免系统Python和其他版本的冲突。 还有,用户可能需要确认安装的Python开发包是否齐全。例如,在Ubuntu系统中,python3-dev包是否已安装,缺少这个可能导致头文件找不到,从而引发警告。 最后,如果用户不需要Python绑定,可以彻底禁用Python支持,但这可能影响某些功能的使用。因此,更好的方法是正确配置Python路径,确保CMake能够正确检测到所需的Python环境。 总结一下,步骤可能包括:检查Python环境,手动指定路径,安装必要开发包,使用虚拟环境,以及调整CMake参数。需要根据用户的具体情况来推荐合适的解决方案。</think>在配置OpenCV时遇到Python检测相关的CMake警告,通常是由于CMake无法正确识别系统Python环境路径或版本冲突导致。以下是分步解决方案: --- ### 1. **明确Python版本与环境** - **检查默认Python版本**:运行`python --version`和`python3 --version`确认系统主版本 - **推荐使用Python虚拟环境**: ```bash python3 -m venv myenv source myenv/bin/activate pip install numpy # OpenCV依赖numpy ``` --- ### 2. **手动指定Python路径** 在CMake配置时,**显式传递Python路径参数**覆盖自动检测: ```bash cmake -D PYTHON3_EXECUTABLE=$(which python3) \ -D PYTHON3_INCLUDE_DIR=$(python3 -c "import sysconfig; print(sysconfig.get_path(&#39;include&#39;))") \ -D PYTHON3_LIBRARY=$(python3 -c "import sysconfig; print(sysconfig.get_config_var(&#39;LIBDIR&#39;))") \ .. ``` *参数说明*: - `PYTHON3_EXECUTABLE`:Python解释器绝对路径 - `PYTHON3_INCLUDE_DIR`:Python头文件目录(如`/usr/include/python3.8`) - `PYTHON3_LIBRARY`:Python库文件路径(如`/usr/lib/x86_64-linux-gnu/libpython3.8.so`) --- ### 3. **安装Python开发包** 若出现`Could NOT find PythonLibs`警告,需安装开发包: - **Ubuntu/Debian**: ```bash sudo apt-get install python3-dev ``` - **CentOS/RHEL**: ```bash sudo yum install python3-devel ``` --- ### 4. **抑制特定警告(非推荐)** 若需临时屏蔽警告,可在CMake命令中添加: ```bash cmake --no-warn-unused-cli -Wno-dev .. ``` 但此方法会隐藏所有警告,可能掩盖其他潜在问题[^2]。 --- ### 5. **验证配置结果** CMake成功后,检查输出日志中的Python相关条目: ``` -- Python 3: -- Interpreter: /path/to/python3 (ver 3.8.10) -- Libraries: /usr/lib/x86_64-linux-gnu/libpython3.8.so -- numpy: /myenv/lib/python3.8/site-packages/numpy/core/include (ver 1.22.4) ``` --- ### 常见错误处理 | 警告类型 | 解决方案 | |-----------------------------------|--------------------------------------------------------------------------| | `Could NOT find PythonInterp` | 确认`python3`在PATH中,或通过`-DPYTHON3_EXECUTABLE`手动指定 | | `Could NOT find PythonLibs` | 安装python3-dev包,或通过`-DPYTHON3_LIBRARY`指定库路径 | | `numpy not found` | 在Python环境中先执行`pip install numpy` | ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kin-Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值