可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm attempting to Dockerise a Python application, which depends on OpenCV. I've tried several different ways, but I keep getting... ImportError: No module named cv2 when I attempt to run the application.
Here's my current Dockerfile.
And my requirements.txt file
Flask==0.8 gunicorn==0.14.2 requests==0.11.1 bs4==0.0.1 nltk==3.2.1 pymysql==0.7.2 xlsxwriter==0.8.5 numpy==1.11 Pillow==3.2.0 cv2==1.0 pytesseract==0.1
回答1:
Fixed with a slightly different set-up
回答2:
Thanks for posting this. I ran into the same issue and tried your solution and although it seemed to install OpenCV it left me with an issue of conflicting versions of the Python six library so I took a different route. I think a simpler way to do this is to install Anaconda in your container and then add OpenCV. I'm using Python 2 so my entire Dockerfile to get OpenCvv installed is just:
FROM continuumio/anaconda EXPOSE 5000 ADD . /code-directory WORKDIR code-directory RUN conda install opencv CMD ["python", "run-code.py"]
This will install Anaconda from the continuumio/anaconda Dockerfile and then it will use Anaconda to install opencv. There is a seperate continuumio Dockerfile for Python 3 if you need that as well.
回答3:
Here's an image that is built on Ubuntu 16.04 with Python2 + Python3 + OpenCV. You can pull it using docker pull chennavarri/ubuntu_opencv_python
Here's the Dockerfile (provided in the same dockerhub repo mentioned above) that will install opencv for both python2 and python3 on Ubuntu 16.04 and also sets the appropriate raw1394 link. Copied from https://github.com/chennavarri/docker-ubuntu-python-opencv
FROM ubuntu:16.04 MAINTAINER Chenna Varri RUN apt-get update RUN apt-get install -y build-essential apt-utils RUN apt-get install -y cmake git libgtk2.0-dev pkg-config libavcodec-dev \ libavformat-dev libswscale-dev RUN apt-get update && apt-get install -y python-dev python-numpy \ python3 python3-pip python3-dev libtbb2 libtbb-dev \ libjpeg-dev libjasper-dev libdc1394-22-dev \ python-opencv libopencv-dev libav-tools python-pycurl \ libatlas-base-dev gfortran webp qt5-default libvtk6-dev zlib1g-dev RUN pip3 install numpy RUN apt-get install -y python-pip RUN pip install --upgrade pip RUN cd ~/ &&\ git clone https://github.com/Itseez/opencv.git &&\ git clone https://github.com/Itseez/opencv_contrib.git &&\ cd opencv && mkdir build && cd build && cmake -DWITH_QT=ON -DWITH_OPENGL=ON -DFORCE_VTK=ON -DWITH_TBB=ON -DWITH_GDAL=ON -DWITH_XINE=ON -DBUILD_EXAMPLES=ON .. && \ make -j4 && make install && ldconfig # Set the appropriate link RUN ln /dev/null /dev/raw1394 RUN cd ~/opencv
Some additional instructions for people newly starting with Docker:
In the directory where you put this Dockerfile, build the docker image as docker build -t ubuntu_cv .
Once the image is built, you can check by doing docker images
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu_cv latest 6210ddd6346b 24 minutes ago 2.192 GB
You can start a docker container as docker run -t -i ubuntu_cv:latest
回答4:
from ubuntu:12.10 # Ubuntu sides with libav, I side with ffmpeg. run echo "deb http://ppa.launchpad.net/jon-severinsson/ffmpeg/ubuntu quantal main" >> /etc/apt/sources.list run apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1DB8ADC1CFCA9579 run apt-get update run apt-get install -y -q wget curl run apt-get install -y -q build-essential run apt-get install -y -q cmake run apt-get install -y -q python2.7 python2.7-dev run wget 'https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg' && /bin/sh setuptools-0.6c11-py2.7.egg && rm -f setuptools-0.6c11-py2.7.egg run curl 'https://raw.github.com/pypa/pip/master/contrib/get-pip.py' | python2.7 run pip install numpy run apt-get install -y -q libavformat-dev libavcodec-dev libavfilter-dev libswscale-dev run apt-get install -y -q libjpeg-dev libpng-dev libtiff-dev libjasper-dev zlib1g-dev libopenexr-dev libxine-dev libeigen3-dev libtbb-dev add build_opencv.sh /build_opencv.sh run /bin/sh /build_opencv.sh run rm -rf /build_opencv.sh