ImportError: Не удалось найти общую библиотеку zbar на Flask

Я пытаюсь использовать pyzbar 0.1.4 на сервере Flask в Docker.

Образ был создан нами на основе python 2.7, взятого с alpine.

Установить ZBar

apk update
apk add zbar

Я получаю следующую ошибку при запуске dockerfile File "/usr/lib/python2.7/site-packages/pyzbar/pyzbar.py", line 8, in <module> from .wrapper import ( File "/usr/lib/python2.7/site-packages/pyzbar/wrapper.py", line 166, in <module> c_uint_p, # minor File "/usr/lib/python2.7/site-packages/pyzbar/wrapper.py", line 159, in zbar_function return prototype((fname, load_libzbar())) File "/usr/lib/python2.7/site-packages/pyzbar/wrapper.py", line 135, in load_libzbar raise ImportError('Unable to find zbar shared library') ImportError: Unable to find zbar shared library

Я пытаюсь декодировать QR-изображение, используя эту библиотеку.

Докерфайл

FROM buffetcontainerimages.azurecr.io/base/buffetcloud-python:0.1
RUN pip install --upgrade pip setuptools wheel
COPY wheeldir /opt/app/wheeldir
COPY *requirements.txt /opt/app/src/
RUN pip install --use-wheel --no-index --find-links=/opt/app/wheeldir \
-r /opt/app/src/requirements.txt
RUN pip install --use-wheel --no-index --find-links=/opt/app/wheeldir \
-r /opt/app/src/test-requirements.txt
COPY . /opt/app/src/
WORKDIR /opt/app/src
RUN python setup.py install
EXPOSE 5000
CMD dronedemo

И требования.txt

requests>=2.18.4
flask>=0.12.2
mechanize>=0.3.6
regex>=2.4.136
PyPDF2>=1.26.0
bs4>=4.5.3
pyzbar>=0.1.4
openpyxl>=2.5.0
selenium>=3.9.0
matplotlib>=2.1.2

Когда pip install zbar `pip install zbar Сбор zbar Загрузка zbar-0.10.tar.bz2 ... zbarmodule.h:26:18: фатальная ошибка: zbar.h: Нет такого файла или каталога

включают

компиляция прекращена. ошибка: команда 'gcc' не удалась со статусом выхода 1 `


person Nicolas Fuchs    schedule 14.02.2018    source источник
comment
Можете ли вы поделиться файлом Dockerfile и прочим?   -  person Ivonet    schedule 14.02.2018
comment
Это выглядит странно. dll обычно означает окна. затем вы показываете трассировку стека с помощью '/usr/lib/python2.7/...', которая говорит мне, что вы работаете в системе * nix.. не могли бы вы опубликовать свой файл docker (обязательно) и файл python req на всякий случай.   -  person Javier Buzzi    schedule 14.02.2018
comment
@Ivonet Добавлен файл докеры и требования   -  person Nicolas Fuchs    schedule 14.02.2018
comment
Откуда этот образ? На чем он основан? scratch? debian? как устанавливается пакет?   -  person Javier Buzzi    schedule 14.02.2018
comment
Еще одно примечание: pyzbar выглядит как оболочка для окон, github.com/NaturalHistoryMuseum/pyzbar, поэтому это не то, что вы хотите использовать.   -  person Javier Buzzi    schedule 14.02.2018
comment
@JavierBuzzi Изображение было создано нами на основе Python 2.7, взятого из alpine. Пакет устанавливается через apk update apk add zbar   -  person Nicolas Fuchs    schedule 14.02.2018
comment
Во всяком случае, я думаю pyzbar (у них есть колесо для любой среды, но что-то мне подсказывает, что они его не проверяли) совершенно исключено, поскольку оно хочет быть установлено на Windows, попробуйте просто пип установка zbar   -  person Javier Buzzi    schedule 14.02.2018


Ответы (4)


Простой тест, выглядит хорошо.

FROM python:2.7
RUN apt-get update && \
    apt-get install -y build-essential libzbar-dev && \
    pip install zbar

я попробовал alpine... но zbar lib доступен только в пограничной ветке - попытка заставить его работать была больше проблем, чем того стоила.

ПС. остерегайтесь образов, которых нет в репозитории Docker. -- не знал, что это ваш образ


Рабочий пример:

$ docker build -t yourimagenamehere .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM python:2.7
 ---> 9e92c8430ba0
... trunc...
Successfully built d951cd32ea74
Successfully tagged yourimagenamehere:latest
$ docker run -it --rm yourimagenamehere 
Python 2.7.14 (default, Dec 12 2017, 16:55:09) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import zbar
>>> 
person Javier Buzzi    schedule 14.02.2018
comment
Где взять образ Python:2.7? Альпийский - person Nicolas Fuchs; 14.02.2018
comment
@NicolasFuchs из официального репозитория докеров (hub.docker.com/_/python), если вы запустите это, он автоматически загрузит его для вас и создаст образ для вас - вам не нужно его иметь, докер достаточно умен, чтобы пойти и получить его. Обратите внимание на Рабочий пример и найдите $, и вы можете сделать это самостоятельно. - person Javier Buzzi; 14.02.2018

В Ubuntu установите zbar-tools

sudo apt-get install zbar-tools
person Mise    schedule 13.11.2019

Я согласен со второй похвалой в вашем посте, но вы можете попробовать установить зависимость pyzbar через pip.

FROM buffetcontainerimages.azurecr.io/base/buffetcloud-python:0.1
RUN pip install --upgrade pip setuptools wheel pyzbar
COPY wheeldir /opt/app/wheeldir
COPY *requirements.txt /opt/app/src/
RUN pip install --use-wheel --no-index --find-links=/opt/app/wheeldir \
-r /opt/app/src/requirements.txt
RUN pip install --use-wheel --no-index --find-links=/opt/app/wheeldir \
-r /opt/app/src/test-requirements.txt
RUN pip install -y pyzbar
COPY . /opt/app/src/
WORKDIR /opt/app/src
RUN python setup.py install
EXPOSE 5000
CMD dronedemo
person Ivonet    schedule 14.02.2018

В терминале Ubuntu просто запустите эту команду, и это установит zbar в ваш глобальный пакет.

sudo apt-get install zbar-tools
person Kautuk Dwivedi    schedule 26.03.2021