在 anaconda3 中安装 openCV - Python.h:没有这样的文件或目录
问题描述
我正在尝试为我的 anaconda3 安装构建 opencv 3.1.0,但我的构建失败:
I'm trying to build opencv 3.1.0 for my anaconda3 installation and my build is failing at:
[ 94%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o
/home/mikel/Soft/opencv/modules/python/src2/cv2.cpp:6:20: fatal error: Python.h: No such file or directory
compilation terminated.
我使用 git checkout 3.1.0
在 3.1.0 版本中克隆了 opencv 和 opencv-contrib,我正在尝试构建 ~/Soft/opencv/build
我在 ~/Soft/opencv-contrib
中有 opencv-contrib.我正在使用 i7-4960X 运行 Ubuntu GNOME 15.10.
I have opencv and opencv-contrib cloned with versions 3.1.0 by using git checkout 3.1.0
in both and I am trying to build in ~/Soft/opencv/build
where I have opencv-contrib in ~/Soft/opencv-contrib
. I'm running Ubuntu GNOME 15.10 with an i7-4960X.
我的主要目标是让 opencv 在我的 anaconda3 安装中工作,所以我的 cmake 命令如下:
My main goal is to make opencv work in my anaconda3 installation and so my cmake command is the following:
cmake
-D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_INSTALL_PREFIX=/usr/local
-D INSTALL_C_EXAMPLES=OFF
-D INSTALL_PYTHON_EXAMPLES=ON
-D OPENCV_EXTRA_MODULES_PATH=~/Soft/opencv_contrib/modules
-D PYTHON3_EXECUTABLE=/home/mikel/anaconda3/bin/python3.5
-D PYTHON3_INCLUDE_DIR=/home/mikel/anaconda3/include/
-D PYTHON3_LIBRARY=/home/mikel/anaconda3/lib/libpython3.5m.so
-D PYTHON3_PACKAGES_PATH=/home/mikel/anaconda3/lib/python3.5/site-packages/
-D PYTHON3_NUMPY_INCLUDE_DIRS=/home/mikel/anaconda3/lib/python3.5/site-packages/numpy/core/include
-D PYTHON_DEFAULT_AVAILABLE=/home/mikel/anaconda3/bin/python3.5
-D BUILD_EXAMPLES=ON ..
我的 cmake 命令的输出在这里:http://pastebin.com/qtd1wyMb - 一切正常据我所知.
The output of my cmake command is here: http://pastebin.com/qtd1wyMb - Everything okay as far as I can see.
然后我运行 make -j12
来安装 opencv,经过几次警告后它运行良好,直到 94%,我得到以下输出:
I then run make -j12
to install opencv and after a few warnings it runs fine until 94%, where I get the following output:
Scanning dependencies of target opencv_python3
[ 94%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o
/home/mikel/Soft/opencv/modules/python/src2/cv2.cpp:6:20: fatal error: Python.h: No such file or directory
compilation terminated.
modules/python3/CMakeFiles/opencv_python3.dir/build.make:278: 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:18929: recipe for target 'modules/python3/CMakeFiles/opencv_python3.dir/all' failed
make[1]: *** [modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 94%] Building CXX object modules/stitching/CMakeFiles/opencv_perf_stitching.dir/perf/perf_main.cpp.o
[ 94%] Built target opencv_test_optflow
[ 94%] [ 94%] Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_registration.dir/tutorial_code/calib3d/real_time_pose_estimation/src/CsvWriter.cpp.o
Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_detection.dir/tutorial_code/calib3d/real_time_pose_estimation/src/CsvReader.cpp.o
[ 94%] [ 94%] Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_registration.dir/tutorial_code/calib3d/real_time_pose_estimation/src/ModelRegistration.cpp.o
Building CXX object modules/stitching/CMakeFiles/opencv_test_stitching.dir/test/ocl/test_warpers.cpp.o
[ 94%] Building CXX object modules/stitching/CMakeFiles/opencv_perf_stitching.dir/perf/opencl/perf_stitch.cpp.o
Linking CXX executable ../../bin/cpp-example-bgfg_segm
Linking CXX executable ../../bin/cpp-example-autofocus
[ 94%] Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_detection.dir/tutorial_code/calib3d/real_time_pose_estimation/src/CsvWriter.cpp.o
[ 94%] Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_detection.dir/tutorial_code/calib3d/real_time_pose_estimation/src/ModelRegistration.cpp.o
[ 94%] Linking CXX executable ../../bin/opencv_test_tracking
Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_registration.dir/tutorial_code/calib3d/real_time_pose_estimation/src/Mesh.cpp.o
[ 94%] Built target example_bgfg_segm
[ 94%] [ 94%] Built target example_autofocus
Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_registration.dir/tutorial_code/calib3d/real_time_pose_estimation/src/Model.cpp.o
[ 94%] [ 94%] Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_registration.dir/tutorial_code/calib3d/real_time_pose_estimation/src/Utils.cpp.o
Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_registration.dir/tutorial_code/calib3d/real_time_pose_estimation/src/PnPProblem.cpp.o
[ 94%] Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_detection.dir/tutorial_code/calib3d/real_time_pose_estimation/src/Mesh.cpp.o
[ 94%] Built target opencv_test_tracking
[ 94%] Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_detection.dir/tutorial_code/calib3d/real_time_pose_estimation/src/Model.cpp.o
[ 94%] Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_detection.dir/tutorial_code/calib3d/real_time_pose_estimation/src/PnPProblem.cpp.o
[ 94%] Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_detection.dir/tutorial_code/calib3d/real_time_pose_estimation/src/Utils.cpp.o
[ 94%] Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_registration.dir/tutorial_code/calib3d/real_time_pose_estimation/src/RobustMatcher.cpp.o
[ 94%] Building CXX object samples/cpp/CMakeFiles/cpp-tutorial-pnp_detection.dir/tutorial_code/calib3d/real_time_pose_estimation/src/RobustMatcher.cpp.o
[ 94%] Building CXX object modules/stitching/CMakeFiles/opencv_perf_stitching.dir/perf/opencl/perf_warpers.cpp.o
Linking CXX executable ../../bin/cpp-example-3calibration
[ 94%] Building CXX object modules/stitching/CMakeFiles/opencv_test_stitching.dir/test/test_main.cpp.o
[ 94%] Built target example_3calibration
Linking CXX executable ../../bin/opencv_test_stitching
[ 94%] Built target opencv_test_stitching
Linking CXX executable ../../bin/cpp-tutorial-pnp_registration
[ 94%] Built target cpp-tutorial-pnp_registration
Linking CXX executable ../../bin/cpp-tutorial-pnp_detection
[ 94%] Built target cpp-tutorial-pnp_detection
Linking CXX executable ../../bin/opencv_perf_stitching
[ 94%] Built target opencv_perf_stitching
Makefile:146: recipe for target 'all' failed
make: *** [all] Error 2
make 的完整输出供参考:http://pastebin.com/1zNgsckZ
The full output from make is here for reference: http://pastebin.com/1zNgsckZ
看起来我的问题是因为我使用的是 anaconda3 路径而不是标准的 python3 路径,它不再能找到 Python.h.但是,当我使用系统python3安装进行安装时,无法将opencv导入到需要的anaconda中.
It looks like my issue is because I'm using the anaconda3 paths instead of the standard python3 paths, it can no longer find Python.h. However, when I install using the system python3 installation, I can't import opencv into anaconda where I need it.
我已经安装了 python3-dev 和 python-dev,所以 Python.h 应该在我的机器上.为了让 openCV 找到 Python.h,我需要进行哪些更改?
I have python3-dev and python-dev installed, so Python.h should be on my machine. What do I need to change in order to make openCV find Python.h?
我发现 Anaconda3 的 Python.h 在 anaconda3/include/python3.5m/中,所以我设置了 PYTHON3_INCLUDE_DIR=anaconda3/include/python3.5m/
和现在我得到一个不同的错误:
I found that Anaconda3's Python.h is in anaconda3/include/python3.5m/ so I set PYTHON3_INCLUDE_DIR=anaconda3/include/python3.5m/
and now I get a different error:
Scanning dependencies of target opencv_python3
Linking CXX executable ../../bin/opencv_test_optflow
[ 91%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o
In file included from /home/mikel/Soft/opencv/build/modules/python3/pyopencv_generated_include.h:11:0,
from /home/mikel/Soft/opencv/modules/python/src2/cv2.cpp:12:
/home/mikel/Soft/opencv_contrib/modules/hdf/include/opencv2/hdf/hdf5.hpp:40:18: fatal error: hdf5.h: No such file or directory
compilation terminated.
modules/python3/CMakeFiles/opencv_python3.dir/build.make:278: 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:18929: recipe for target 'modules/python3/CMakeFiles/opencv_python3.dir/all' failed
make[1]: *** [modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
解决方案
我解决了这个问题.问题是 PYTHON3_INCLUDE_DIR
设置为 ~/anaconda3/include
而 Anaconda 的 Python.h 实际上在 ~/anaconda3/include/python3.5m
.设置 PYTHON3_INCLUDE_DIR=anaconda3/include/python3.5m/
解决了这个问题,因为它现在看到了 Python.h
I fixed the issue. The problem was that PYTHON3_INCLUDE_DIR
was set to ~/anaconda3/include
while Anaconda's Python.h is actually inside ~/anaconda3/include/python3.5m
. Setting PYTHON3_INCLUDE_DIR=anaconda3/include/python3.5m/
fixes this issue as it now sees Python.h
然而,这导致了另一个问题,其中一些 .h 文件,如 hdf5.h
和 H5public.h
不再对 OpenCV 可见,因为它们在主文件中anaconda3/include/目录,不在子文件夹中.
However, this led to another problem where some .h files such as hdf5.h
and H5public.h
were no longer visible to OpenCV as these were in the main anaconda3/include/ directory, not in the subfolder.
解决方法是将include/
目录下的所有.h文件复制到include/python3.5m
目录(复制都进入另一个目录并将其设置为路径也可以使用),以便所有 .h 文件都位于编译器可见的同一文件夹中.现在可以构建 OpenCV!
The solution for this was to copy all the .h files from the include/
directory into the include/python3.5m
directory (copying the contents of both into another directory and setting that as the path would also work) so that all the .h files are in the same folder visible to the compiler. OpenCV now builds!
相关文章