OpenCV Cmake时Python路径不因指令参数而改变

环境概览

WSL Linux + OpenCV + OpenCV Contrib + CUDA
cmake + make 本地编译
Conda Python 3.12.9

首次cmake问题

使用bash脚本配置cmake编译,第一次配置的时候忘记指定python了,如下

set -e

export CONDA_HOME=/home/mgam/miniforge3
export ENV_HOME=${CONDA_HOME}/envs/latest
export CPLUS_INCLUDE_PATH=${ENV_HOME}/lib/python3.12

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
      -D BUILD_opencv_world=ON \
      -D WITH_CUDA=ON \
      -D WITH_CUDNN=ON \
      -D WITH_OPENMP=ON \
      -D WITH_NVCUVID=ON \
      -D WITH_NVCUVENC=ON \
      -D INSTALL_PYTHON_EXAMPLES=OFF \
      -D INSTALL_C_EXAMPLES=OFF \
      -D BUILD_EXAMPLES=OFF \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D CUDA_FAST_MATH=ON \
      -D ENABLE_FAST_MATH=ON \
      -D CUDA_ARCH_BIN=8.9 \
      -D BUILD_opencv_python2=OFF \
      -D BUILD_opencv_python3=ON \
      ..

cmake后python3的部分显示如下:

--   Python 3:
--     Interpreter:                 /home/mgam/miniforge3/envs/latest/bin/python3.12 (ver 3.12.9)
--     Libraries:                      NO
--     Limited API:                 NO
--     numpy:                       /home/mgam/miniforge3/envs/latest/lib/python3.12/site-packages/numpy/_core/include (ver 2.2.3)
--     install path:                -
-- 
--   Python (for build):            /home/mgam/miniforge3/envs/latest/bin/python3.12

install path、 Libraries、API都没有正常显示,此时安装后在python环境中是找不到cv2的。

完善cmake指令后问题不修复

set -e

export CONDA_HOME=/home/mgam/miniforge3
export ENV_HOME=${CONDA_HOME}/envs/latest
export CPLUS_INCLUDE_PATH=${ENV_HOME}/lib/python3.12

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
      -D BUILD_opencv_world=ON \
      -D WITH_CUDA=ON \
      -D WITH_CUDNN=ON \
      -D WITH_OPENMP=ON \
      -D WITH_NVCUVID=ON \
      -D WITH_NVCUVENC=ON \
      -D INSTALL_PYTHON_EXAMPLES=OFF \
      -D INSTALL_C_EXAMPLES=OFF \
      -D BUILD_EXAMPLES=OFF \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D CUDA_FAST_MATH=ON \
      -D ENABLE_FAST_MATH=ON \
      -D CUDA_ARCH_BIN=8.9 \
      -D BUILD_opencv_python2=OFF \
      -D BUILD_opencv_python3=ON \
      -D PYTHON3_LIBRARY=$ENV_HOME/lib/libpython3.12.so \
      -D PYTHON3_INCLUDE_DIR=$ENV_HOME/include/python3.12 \
      -D PYTHON3_EXECUTABLE=$ENV_HOME/bin/python3.12 \
      -D PYTHON3_PACKAGES_PATH=$ENV_HOME/lib/python3.12/site-packages \
      ..

查看到cmake python3的部分显示依旧没有改变,编译后安装后在python中还是找不到。

问题解决

删除build路径下所有文件再执行cmake。
没想到居然是cmake缓冲的问题,可能是cmake在多次同目录下执行的时候,会读取之前的生成文件。
即使在后续的cmake指令中修改了一些指令,也会因为生成文件缓冲读取而不被cmake真正利用起来。

正确的cmake输出的python部分应该显示如下:

--   Python 3:
--     Interpreter:                 /home/mgam/miniforge3/envs/latest/bin/python3.12 (ver 3.12.9)
--     Libraries:                   /home/mgam/miniforge3/envs/latest/lib/libpython3.12.so (ver 3.12.9)
--     Limited API:                 NO
--     numpy:                       /home/mgam/miniforge3/envs/latest/lib/python3.12/site-packages/numpy/_core/include (ver 2.2.3)
--     install path:                /home/mgam/miniforge3/envs/latest/lib/python3.12/site-packages/cv2/python-3.12
-- 
--   Python (for build):            /home/mgam/miniforge3/envs/latest/bin/python3.12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值