Как я могу использовать 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, и, следовательно, будет скопирован правильно.