Как я могу использовать python-magic в python, docker

я использую docker, python 3.8.5-alpine

и я хочу проверить тип mime загружаемого файла

я делаю validators.py и загружаю модуль python-magic-bin

он работает в тестовой части (окно, pycharm)

Итак, я пытаюсь загрузить на ubuntu 18.04. Сборка docker прошла успешно. но я получаю Import Error: No module called magic. message

python-magic python-magic-bin libmagic libmagic1 и т.д. это не работает...

Есть ли какое-нибудь решение в этой ситуации? Мне интересно, что добавить в мой код

мой Dockerfile

FROM python:3.8.5-alpine

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN apk update
RUN apk add g++ postgresql-dev cargo gcc python3-dev libffi-dev openssl-dev musl-dev zlib-dev jpeg-dev #--(5.2)

COPY . /usr/src/app/
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

requrements.txt

asgiref==3.3.2
backcall==0.2.0
beautifulsoup4==4.9.1
certifi==2020.6.20
chardet==3.0.4
colorama==0.4.3
Cython==0.29.22
decorator==4.4.2
defusedxml==0.6.0
Django==3.2.6
django-allauth==0.42.0
django-crispy-forms==1.9.2
django-extensions==3.0.9
django-markdownx==3.0.1
django-summernote==0.8.11.6
django-axes==5.17.0
et-xmlfile==1.0.1
gunicorn==20.0.4
idna==2.10
importlib-metadata==2.0.0
ipython==7.18.1
ipython-genutils==0.2.0
jdcal==1.4.1
jedi==0.17.2
Markdown==3.2.2
numpy==1.20.2
numexpr==2.8.1
oauthlib==3.1.0
openpyxl==3.0.6
pandas==1.3.0
parso==0.7.1
pickleshare==0.7.5
Pillow==7.2.0
prompt-toolkit==3.0.7
psycopg2==2.8.6
pycparser==2.20
Pygments==2.7.1
python-dateutil==2.8.1
python-magic==0.4.24
python3-openid==3.2.0
pytz==2020.1
requests==2.24.0
requests-oauthlib==1.3.0
semantic-version==2.8.5
setuptools
setuptools-rust==0.11.6
six==1.15.0
soupsieve==2.0.1
sqlparse==0.3.1
toml==0.10.2
traitlets==5.0.4
urllib3==1.25.10
wcwidth==0.2.5
zipp==3.2.0

validators.py

import os
#import magic
from django.core.exceptions import ValidationError

def validate_extension(file):
    #valid_mime_types = ["application/avi", "application/mp4", "application/xlsx", "application/xls", "application/ppt", "application/pptx", "application/hwp", "application/doc", "application/docx", "application/pdf", "image/jpeg", "image/png", "image/jpg"]
    #file_mime_type = magic.from_buffer(file.read(2048), mime=True) #  Changed this to 1024 to 2048

#    if file_mime_type not in valid_mime_types:
#        raise ValidationError("it is not correct files.")

    valid_file_extensions = [".avi", ".mp4", ".xlsx", ".xls", ".ppt", ".pptx", ".hwp", ".doc", ".docx", ".pdf", ".jpeg", ".png", ".jpg"]
    ext = os.path.splitext(file.name)[1]

    if ext.lower() not in valid_file_extensions:
        raise ValidationError("it is not correct")

По-моему, похоже, что вы не указываете на правильный файл requirments.txt, поскольку вы копируете его в /usr/SRC/app, а не в текущий каталог Wirkung. Вы можете изменить свой рабочий каталог в docker с помощью WORKDIR. Может быть tr

COPY . /usr/src/app 
WORKDIR /usr/src/app

Здесь я предполагаю, что ваш файл requirements.txt находится в том же каталоге, что и ваш Dockerfile, и, следовательно, будет скопирован правильно.

Вернуться на верх