Проблемы с установкой opencv в Docker-контейнере с помощью pip

1

Я хочу создать контейнер docker python с scikit-learn, opencv и numpy. К сожалению, я не смог найти готовый контейнер, который содержал все это, но я нашел тот, который содержит numpy и scikit-learn.

https://hub.docker.com/r/frolvlad/alpine-python-machinelearning/

Мне все еще нужно было установить opencv, поэтому в моем файле докеров я включил 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?

Любая помощь приветствуется

Кроме того, я буду включать мой полный файл Docker ниже, я хочу использовать openFaas, который является безсерверной картой, поэтому мой файл Docker может выглядеть нечетным:

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
docker

2 ответа

1

Я просто столкнулся с этой проблемой. Оказывается, это не работает, потому что opencv-python не имеет готовых колес для Alpine (дистрибутив, который вы используете в качестве своего базового изображения докеров).

Разговор в этом выпуске пакета opencv-python объясняет, почему это происходит более подробно. TL: DR: если вам действительно нужно использовать Alpine, вы можете попытаться установить установку manylinux-колеса для opencv-python, но это может сломаться. Ваш лучший вариант, если вам нужно сохранить Alpine, - это построить модуль из источника. Поскольку вы используете это на OpenFAAS, я подозреваю, что вы захотите сохранить свой размер на низком уровне, поэтому создание из источника может быть хорошим вариантом для вас.

Если вы не привязаны к Alpine, я бы предложил перейти к другому базовому образцу докеров. Если вы не знаете, какой образ использовать в качестве базы, я бы порекомендовал python:3.7-slim, так как он будет установлен с уже установленным Python (замените 3.7 на ту версию, которую вы используете, но на самом деле... 3.7 хорошо), С помощью этого контейнера вы можете просто запустить pip install opencv-python numpy scipy для установки всех трех ваших необходимых пакетов. Остальная часть вашего Dockerfile должна работать в основном немодифицированной; вам просто нужно будет установить/удалить curl используя apt вместо apk.

0

На самом деле вам не следует устанавливать open-cv using pip, вам нужно установить с помощью пакета OpenCV. Если вы используете Windows:

http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_setup/py_setup_in_windows/py_setup_in_windows.html

а затем перейдите в папку /opencv/build/python/xxxx и скопируйте папку в папку \ Python\Pythonxxx\Lib\site-пакеты (xxx beeing с вашей версией Python)

И если вы находитесь в среде Linux, просто:

 sudo apt-get install python-opencv

Кроме того, вы можете установить с помощью файла колес с открытого cv, который можно загрузить по адресу: https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv Выберите правильную версию, касающуюся вашей версии Python, а затем запустите

pip install "wheel_file_name.whl"

Чтобы проверить, все ли работает нормально, выполните:

import cv2 as cv
print(cv.__version__)

Если вы все сделали правильно, не печатайте никаких ошибок

  • 0
    Так вы говорите, что я не могу это сделать? Я не могу использовать такие команды, как apt-get, потому что этот контейнер Docker работает в среде Python.
  • 0
    Я не уверен, правильно ли я понял ваш сценарий, я предполагаю, что вы используете виртуальные среды. Если я прав, вы можете просто вызвать apt-get и затем скопировать глобально установочные файлы в вашу виртуальную среду, вам нужно просто запустить apt-get для opencv и затем использовать cp "путь к папке пакета opencv" "~ / .virtualenvs / yourenv / same_folder_in_your_virtualenv»
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню