我试图为python3构建opencv.但是,即使我手动为python3指定了include和lib选项之后,cmake总是将python构建选项设置为python2.7.11:
-- Python 2:
-- Interpreter: /home/ryu/anaconda2/bin/python2.7 (ver 2.7.11)
-- Python 3:
-- Interpreter: /usr/bin/python3 (ver 3.4.3)
-- Libraries: /usr/lib/x86_64-linux-gnu/libpython3.4m (ver 3.4.3)
-- numpy: /home/ryu/.local/lib/python3.4/site-packages/numpy/core/include (ver 1.11.0)
-- packages path: lib/python3.4/dist-packages
--
-- **Python (for build): /home/ryu/anaconda2/bin/python2.7**
Run Code Online (Sandbox Code Playgroud)
我错过了一些cmake选项吗?
操作系统:Ubuntu 14,04
谢谢
Iva*_*eno 38
您可以通过PYTHON_DEFAULT_EXECUTABLE在cmake调用期间使用python可执行URI 附加参数来覆盖要构建的python可执行文件.
cmake {...} -DPYTHON_DEFAULT_EXECUTABLE=$(which python3) ..
Run Code Online (Sandbox Code Playgroud)
我在这个上挣扎了几个小时,上面提到的答案并不能立即解决问题。
除了Ivan的答案外,我还必须在cmake中包括这些标志才能使这项工作:
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D BUILD_opencv_python3=ON \
-D HAVE_opencv_python3=ON \
-D PYTHON_DEFAULT_EXECUTABLE=<path_to_python3>
Run Code Online (Sandbox Code Playgroud)
我把它留在这里,所以将来对其他人可能有用。
我花了几个小时。我用 opencv 为 python3 构建了 Dockerfile,关键字符串是
pip install numpy
完整的 Docker 文件:
FROM python:3.8
RUN apt-get update && apt-get -y install \
cmake \
qtbase5-dev \
libdc1394-22-dev \
libavcodec-dev \
libavformat-dev \
libswscale-dev
RUN cd /lib \
&& git clone --branch 4.1.1 --depth 1 https://github.com/opencv/opencv.git \
&& git clone --branch 4.1.1 --depth 1 https://github.com/opencv/opencv_contrib.git
RUN pip install numpy \
&& mkdir /lib/opencv/build \
&& cd /lib/opencv/build \
&& cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_TBB=ON -DWITH_V4L=ON -DWITH_QT=ON -DWITH_OPENGL=ON -DWITH_FFMPEG=ON -DOPENCV_ENABLE_NONFREE=ON -DOPENCV_EXTRA_MODULES_PATH=/lib/opencv_contrib/modules .. \
&& make -j8 \
&& make install
CMD ["bash"]
Run Code Online (Sandbox Code Playgroud)
要点是强制编译器cv2为python构建模块
为了做到这一点,我们需要python3将其包含在文件夹中的文件To be built中CMakeCache.txtbuildopencv
参考https://breakthrough.github.io/Installing-OpenCV/
如果出现任何错误,请确保您下载了所有必需的软件包 - 输出应该有助于追踪丢失的内容。为了确保构建 Python 模块,运行 cmake 后您应该在配置的模块列表中看到 python2
(在我的例子中是python3)