Я хотел бы создать образ докера из моего приложения django, но я не хочу извлекать мой файл .py.
Для этого мне нужен способ скомпилировать мой файл Python в Docker, а затем удалить все* .py и оставил только * .pyc файл.
Если я просто напишу **/*.py
в файл .dokerignore
, я получу ошибку
ImportError: неверное магическое число в'ajaxfuncs': b '\ x03 \ xf3 \ r \ n'
, поскольку мой исходный файл * .py был скомпилирован с другой версией python (локальный докер python3.6.0 для python3.6 для alpine)
В качестве обходного пути я бы собрал свой файл python в dockerfile, а затем удалил все py
Сначала в свой файл .dockerignorefile я положил: ** / *. Pyc
Затем вМой Dockerfile думает использовать python -m py_compile для генерации моих новых * .pyc файлов:
FROM python:3.6-alpine
EXPOSE 8000
RUN apk update
RUN apk add --no-cache make linux-headers libffi-dev jpeg-dev zlib-dev
RUN apk add postgresql-dev gcc python3-dev musl-dev
RUN mkdir /Code
WORKDIR /Code
COPY ./requirements.txt .
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ENV PYTHONUNBUFFERED 1
COPY . /Code/
RUN python -m py_compile /Code/ajaxfuncs/ajax.py /Code/ajaxfuncs/asktempl.py /Code/ajaxfuncs/group.py /Code/ajaxfuncs/history.py /Code/ajaxfuncs/template_import.py
RUN rm -rf /Code/ajaxfuncs/*.py
ENTRYPOINT python /Code/core/manage.py runserver 0.0.0.0:8000
, но когда я запускаю свое приложение, кажется, что компилятор не компилирует мои файлы, потому что pyc не был найден.
Если я удаляю запись pyc в .dockerignore
, я снова получаю ошибку:
ImportError: bad magic число в 'ajaxfuncs': b '\ x03 \ xf3 \ r \ n'
Кто-нибудь знает, как я могу скомпилировать файл python во время создания контейнера Docker или другой способ избежать файла * .py вконтейнер?
Огромное спасибо заранее