Сводка
Для среды OpenCV, после конфигурации CMake, я попытался make
, но произошла ошибка, сказав Python.h: No such file or directory
.
Среда
- Ubuntu 18.04,
- anaconda3-5.3.1 на pyenv,
- python3.7,
- opencv (4.0.1)и opencv_contrib (4.0.1)
Что я сделал
Сначала я попытался настроить CMake с некоторыми опциями ниже. $CONDA_HOME
равно/home/qcmp/anaconda3
.
(cv) (anaconda3-5.3.1/envs/cv) (base) qcmp@qcmp-Alienware-Aurora-R8:~/opencv/build$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules -D PYTHON3_EXECUTABLE=$CONDA_HOME/envs/cv/bin/python -D PYTHON3_PACKAGES_PATH=$CONDA_HOME/envs/cv/lib/python3.7/site-packages -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D OPENCV_ENABLE_NONFREE=ON -D BUILD_EXAMPLES=ON -D ENABLE_PRECOMPILED_HEADERS=OFF -D BUILD_TESTS=OFF -D PYTHON3_LIBRARY=/home/qcmp/anaconda3/lib/libpython3.7m.so -D PYTHON3_INCLUDE_DIR=/home/qcmp/anaconda3/include/python3.7m -D WITH_CUBLAS=OFF -D OpenBLAS_FOUND=OFF ..
Выход здесь . Есть некоторые предупреждения типа Could not find OpenBLAS include
, но, возможно, это не относится к проблеме make
(?)
После этого, когда make -j8
, произошла ошибка, как показано ниже:
/home/qcmp/opencv/modules/python/src2/cv2.cpp:9:10: fatal error: Python.h: No such file or directory
#include <Python.h>
^~~~~~~~~~
compilation terminated.
modules/python3/CMakeFiles/opencv_python3.dir/build.make:62: recipe for target 'modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o' failed
make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o] Error 1
CMakeFiles/Makefile2:12152: recipe for target 'modules/python3/CMakeFiles/opencv_python3.dir/all' failed
make[1]: *** [modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2
Ошибка говорит, что Python.h не может быть найден. Согласно этой ссылке , при запуске cmake
я добавил опции для добавления пути, такие как -D PYTHON3_LIBRARY=/home/qcmp/anaconda3/lib/libpython3.7m.so -D PYTHON3_INCLUDE_DIR=/home/qcmp/anaconda3/include/python3.7m
. На самом деле в home/qcmp/anaconda3/include/python3.7m/Python.h
действительно есть файл Python.h.
Я уже пробовал sudo apt-get install python3.7-dev
и sudo apt-get install python3-dev
, согласно этой ссылке , но это не помогло решить проблему.
Что мне нужно сделать, чтобы исправить это?
Отредактировано
Я изменил параметры cmake с установки пути к файлу на поиск.
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=$(python -c "import sys; print(sys.prefix)") -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules -D PYTHON3_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -D PYTHON3_EXECUTABLE=$(which python) -D PYTHON3_PACKAGES_PATH=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") -D PYTHON3_LIBRARY=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR') + '/' + sysconfig.get_config_var('LDLIBRARY'))") -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D OPENCV_ENABLE_NONFREE=ON -D BUILD_EXAMPLES=ON ..
Справочная информация о поиске приведена ниже.
$ which python
/home/qcmp/.pyenv/shims/python
$ python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())"
/home/qcmp/.pyenv/versions/anaconda3-5.3.1/envs/cv/include/python3.7m
$ python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
/home/qcmp/.pyenv/versions/anaconda3-5.3.1/envs/cv/lib/python3.7/site-packages
$ python -c "import sys; print(sys.prefix)"
/home/qcmp/.pyenv/versions/anaconda3-5.3.1/envs/cv
$ python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR') + '/' + sysconfig.get_config_var('LDLIBRARY'))"
/home/qcmp/.pyenv/versions/anaconda3-5.3.1/envs/cv/lib/libpython3.7m.so
Однако, я все еще получаю ту же ошибку.