首页 > 解决方案 > Docker 在 Dockerfile 中编译 python 文件

问题描述

我想从我的 django 应用程序创建一个 docker 映像,但我不想拉我的 .py 文件。

为此,我需要一种在 docker 中编译我的 python 文件的方法,然后删除所有 *.py 并只留下 *.pyc 文件。

如果我只是**/*.py.dokerignore文件中写入,我会收到错误

ImportError: 'ajaxfuncs' 中的错误幻数:b'\x03\xf3\r\n'

因为我原来的 *.py 文件是用不同的 python 版本编译的(本地 python3.6.0 docker python3.6 for alpine)

因此,作为解决方法,我将在 dockerfile 中构建我的 python 文件,然后删除所有 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: 'ajaxfuncs' 中的错误幻数:b'\x03\xf3\r\n'

有人知道我如何在 docker 容器创建期间编译 python 文件或另一种避免容器中 *.py 文件的方法吗?

非常感谢提前

标签: pythondjangodocker

解决方案


推荐阅读