![](/img/trans.png)
[英]Permission Denied When Installing Packages Using Pip In Docker Container Django
[英]Trouble installing opencv in docker container using pip
我想構建一個具有 scikit-learn、opencv 和 numpy 的 python docker 容器。 不幸的是,我找不到包含所有這些的預構建容器,但我確實找到了下面包含 numpy 和 scikit-learn 的容器。
https://hub.docker.com/r/frolvlad/alpine-python-machinelearning/
我仍然需要安裝 opencv,所以在我的 docker 文件中我包含了一個RUN pip install opencv-python
。 但是,我不斷收到以下錯誤:
Could not find a version that satisfies the requirement opencv-python (from version: ) No matching distribution found for opencv-python
我在網上讀到的每一件事都說pip install opencv-python
可以工作,但由於某種原因它對我不起作用。 可能是python包的問題嗎?
任何幫助表示贊賞
此外,我將在下面包含我的完整 Dockerfile,我的目標是使用 openFaas,這是一個無服務器框架,所以我的 Dockerfile 可能看起來很奇怪:
FROM frolvlad/alpine-python-machinelearning
RUN apk update
RUN apk upgrade
# Alternatively use ADD https:// (which will not be cached by Docker builder)
RUN apk --no-cache add curl \
&& echo "Pulling watchdog binary from Github." \
&& curl -sSL
https://github.com/openfaas/faas/releases/download/0.8.0/fwatchdog > /usr/bin/fwatchdog \
&& chmod +x /usr/bin/fwatchdog \
&& apk del curl --no-cache
# Add non root user
RUN addgroup -S app && adduser -S -g app app
RUN chown app /home/app
RUN pip install -U pip
USER app
ENV PATH=$PATH:/home/app/.local/bin
WORKDIR /home/app/
RUN pip install opencv-python
RUN mkdir -p function
RUN touch ./function/__init__.py
WORKDIR /home/app/function/
RUN pip install --user app opencv-python
WORKDIR /home/app/
COPY function function
ENV fprocess="python index.py"
HEALTHCHECK --interval=1s CMD [ -e /tmp/.lock ] || exit 1
CMD ["fwatchdog"]
我也剛遇到這個問題。 事實證明這是行不通的,因為opencv-python
沒有任何用於 Alpine 的預構建輪子(您用作基礎 docker 映像的發行版)。
在交談中這對這個問題opencv-python
包解釋了為什么這種情況發生在更多的細節。 TL;DR 是:如果你真的需要使用 Alpine,你可以嘗試強制為opencv-python
安裝manylinux 輪,但這可能會中斷。 如果您需要保留 Alpine,最好的選擇是從源代碼構建模塊。 由於您在 OpenFAAS 上運行它,我懷疑您會希望保持較小的規模,因此從源代碼構建可能對您來說是一個不錯的選擇。
如果您沒有加入 Alpine,我建議您使用不同的基礎 docker 映像。 如果您不確定要使用哪個圖像作為基礎,我會推薦python:3.7-slim
,因為它已經安裝了 Python(用3.7
代替您正在使用的任何版本,但實際上...... 3.7 很好) . 使用此容器,您只需運行pip install opencv-python numpy scipy
即可安裝所有三個所需的軟件包。 Dockerfile 的其余部分應該在大部分情況下無需修改即可工作; 您只需要使用apt
而不是apk
來安裝/卸載curl
。
我遇到了同樣的問題,但由於需要 ARMv7 映像而變得更加復雜(因為它應該在 Raspberry Pi 上運行)。 我在這里將 Dockerfile 和預先構建的 OpenCV 安裝放在一起: alpine-opencv-docker 。
或者,您可以在 Dockerfile 中編譯自己,但這需要大量時間(可能接近一整天),通過:
ENV OPENCV_VER 3.3.0
ENV OPENCV https://github.com/opencv/opencv/archive/${OPENCV_VER}.tar.gz
# build dependencies
RUN apk add -U --no-cache --virtual=build-dependencies \
build-base \
clang \
clang-dev ninja \
cmake \
freetype-dev \
g++ \
jpeg-dev \
lcms2-dev \
libffi-dev \
libgcc \
libxml2-dev \
libxslt-dev \
linux-headers \
make \
musl \
musl-dev \
openjpeg-dev \
openssl-dev \
python3-dev \
zlib-dev \
&& apk add --no-cache \
curl \
freetype \
gcc \
jpeg \
libjpeg \
openjpeg \
python3 \
tesseract-ocr \
zlib
# build opencv from source
RUN mkdir /opt && cd /opt && \
curl -L $OPENCV | tar zx && \
cd opencv-$OPENCV_VER && \
mkdir build && cd build && \
cmake -G Ninja \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_FFMPEG=NO \
-D WITH_IPP=NO \
-D PYTHON_EXECUTABLE=/usr/bin/python3 \
-D WITH_OPENEXR=NO .. && \
ninja && ninja install && \
cp -p $(find /usr/local/lib/python3.6/site-packages -name cv2.*.so) \
/usr/lib/python3.6/site-packages/cv2.so
我通過在一個巨大的 EC2 虛擬機中編譯上述內容來將我的包放在一起,然后從容器中拉出以下路徑:
然后我可以通過我的 Dockerfile 中的普通ADD
命令將它們添加回來,所以現在每個想要啟動容器的人都可以在幾秒鍾而不是幾天內完成。
我發現這篇文章Using Alpine can make Python Docker builds 50x slow ,在處理這個問題時非常有幫助。 這是它的摘錄:
...標准的 Linux 輪子在 Alpine Linux 上不起作用。
為什么? 大多數 Linux 發行版使用標准 C 庫的 GNU 版本 (glibc),幾乎每個 C 程序都需要它,包括 Python。 但是 Alpine Linux 使用 musl,這些二進制輪是針對 glibc 編譯的,因此 Alpine 禁用了 Linux 輪支持。
現在大多數 Python 包都包含 PyPI 上的二進制輪子,顯着加快了安裝時間。 但是,如果您使用的是 Alpine Linux,則需要編譯您使用的每個 Python 包中的所有 C 代碼。
這也意味着您需要自己弄清楚每個系統庫依賴項。
希望這會增加rnorris的評論/建議,以使用不同的基本圖像(如果您未與 Alpine 結婚)。
這篇文章對我調試這個問題非常有幫助。 我希望它也適合你!
使用python:3.7-alpine
,我只能安裝numpy
和opencv-utils
。 我需要做的唯一更改是在 Dockerfile 中將g++
作為附加包添加到我的 apk 命令中
RUN apk --no-cache add g++ ${ADDITIONAL_PACKAGE}
希望這可以幫助 !!
你可以使用這個https://hub.docker.com/r/jjanzic/docker-python3-opencv
它是帶有 python 3.7 和 opencv 4.1.0 的 Docker 鏡像
docker run -it jjanzic/docker-python3-opencv python
>>> import cv2
然后你可以通過pip安裝opencv-python==4.1.2.30
。
如果您正在進行機器學習,也許可以使用張量流圖像作為基礎:
FROM tensorflow/tensorflow:nightly-py3
在這種情況下, pip3 install opencv-python
可以正常工作。
解決了:
pip3 install --upgrade setuptools pip
pip3 安裝 opencv-python
來源> https://github.com/3b1b/manim/issues/1213#issuecomment-703272203
實際上,您不應該使用pip安裝open-cv,而必須使用OpenCV軟件包進行安裝。 如果您使用的是Windows:
然后轉到/ opencv / build / python / xxxx文件夾並將該文件夾復制到\\ Python \\ Pythonxxx \\ Lib \\ site-packages (xxx是您的Python版本)
如果您使用的是Linux環境,則只需:
sudo apt-get install python-opencv
或者,您可以使用打開的cv中的wheel文件進行安裝,該文件可以從以下網站下載: https : //www.lfd.uci.edu/~gohlke/pythonlibs/#opencv選擇與您的Python版本相關的正確版本,然后運行
pip install "wheel_file_name.whl"
要測試一切運行是否順利,請運行:
import cv2 as cv
print(cv.__version__)
如果您正確執行所有操作,則不會顯示任何錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.