无法使用 python3 安装 openCV 3.1.0。 CMAKE 未正确包含或链接 python

新手上路,请多包涵

我正在尝试在我的机器上安装 OpenCV 3.1.0 和 Python3。因为我有 Ubuntu 16.04,所以我完全遵循本指南:

http://www.pyimagesearch.com/2016/10/24/ubuntu-16-04-how-to-install-opencv/

但是,在运行 cmake 之后,我在第 4 步遇到了麻烦。我的 cmake 程序的输出有这个片段:

 --   OpenCL:
--     Version:                     dynamic
--     Include path:                /home/kevin/opencv-3.1.0/3rdparty/include/opencl/1.2
--     Use AMDFFT:                  NO
--     Use AMDBLAS:                 NO
--
--   Python 2:
--     Interpreter:                 /home/kevin/.virtualenvs/cv/bin/python (ver 3.5.2)
--
--   Python 3:
--     Interpreter:                 /home/kevin/.virtualenvs/cv/bin/python3 (ver 3.5.2)
--
--   Python (for build):            /home/kevin/.virtualenvs/cv/bin/python
--
--   Java:
--     ant:                         NO
--     JNI:                         /usr/lib/jvm/java-8-oracle/include /usr/lib/jvm/java-8-oracle/include/linux /usr/lib/jvm/java-8-oracle/include
--     Java wrappers:               NO
--     Java tests:                  NO

cmake 文件似乎没有正确链接 python 部分(库、numpy、packages_path)下缺少的属性。我尝试编译并安装 opencv,当我加载 python3 并导入 cv 时,它说找不到 cv 包。

我尝试修改 CMAKE 命令,因此我没有使用指南建议的内容,而是添加了三个参数来强制 cmake 包含缺少的 python 属性(最后三个属性是我修改的):

 cmake -D CMAKE_BUILD_TYPE=RELEASE     \
-D CMAKE_INSTALL_PREFIX=/usr/local     \
-D INSTALL_PYTHON_EXAMPLES=ON     \
-D INSTALL_C_EXAMPLES=OFF     \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules     \
-D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python     \
-D BUILD_EXAMPLES=ON    \
-D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so    \
-D PYTHON_NUMPY_INCLUDE_DIR=~/.virtualenvs/cv/lib/python3.5/site-packages/numpy/core/include    \
-D PYTHON_PACKAGES_PATH=~/.virtualenvs/cv/lib/python3.5/site-packes ..

但是,cmake 的输出仍然是相同的(它只列出了解释器,没有其他 python 属性),当我尝试构建 opencv 并安装它时,我的 python 解释器找不到 opencv 包。

在我完成安装 opencv 后,我的 /usr/local/lib/python3.5/ 文件也没有 site-packages 目录。

谁能指出我正确的方向?在过去的几个小时里,我一直在尝试搜索如何解决这个问题,但到目前为止还没有找到方法,所以我非常感谢任何指导。谢谢!

更新

我意识到我必须将 -D BUILD_opencv_python3=yes 添加到 cmake 命令,以便 opencv 查找 python 库。但是,这是我从 cmake 获得的新输出:

 --   Python 3:
--     Interpreter:                 /home/kevin/.virtualenvs/cv/bin/python (ver 3.5.2)
--     Libraries:                   NO
--     numpy:                       NO (Python3 wrappers can not be generated)
--     packages path:               lib/python3.5/site-packages

知道为什么 cmake 没有正确找到我的 python 3 库(即使我将“-D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so ”添加到 cmake 选项)?

更新

我通过删除整个 /build 目录并在新目录上运行 cmake 来解决问题。我认为错误继续出现是因为 cmake 做了一些缓存,但是添加标志 -D BUILD_opencv_python3=yes 似乎对我有用。

原文由 user3667125 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

我通过删除整个 /build 目录并再次运行 cmake(使用 -D BUILD_opencv_python3=yes)来解决我的问题。我认为它由于 cmake 的某种缓存而出错,所以当我删除所有内容并重新开始时,错误消失了。

原文由 user3667125 发布,翻译遵循 CC BY-SA 3.0 许可协议

上面的解决方案对我不起作用,我必须指定一大堆选项才能让 cmake 识别 python3。这成功了:

 cmake {...} -D CMAKE_BUILD_TYPE=RELEASE \
  -D CMAKE_INSTALL_PREFIX=/usr/local \
  -D INSTALL_C_EXAMPLES=OFF \
  -D INSTALL_PYTHON_EXAMPLES=ON \
  -D BUILD_EXAMPLES=ON \
  -D PYTHON3_EXECUTABLE=$(which python3) \
  -D PYTHON_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
  -D PYTHON_INCLUDE_DIR2=$(python3 -c "from os.path import dirname; from distutils.sysconfig import get_config_h_filename; print(dirname(get_config_h_filename()))") \
  -D PYTHON_LIBRARY=$(python3 -c "from distutils.sysconfig import get_config_var;from os.path import dirname,join ; print(join(dirname(get_config_var('LIBPC')),get_config_var('LDLIBRARY')))") \
  -D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print(numpy.get_include())") \
  -D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")

原文由 Victor Henriquez 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题