Docker在Dockerfile中编译python文件

Docker在Dockerfile中编译python文件,python,django,docker,Python,Django,Docker,我想从我的django应用程序创建一个docker映像,但我不想提取我的.py文件 为此,我需要一种在docker中编译python文件的方法,然后删除所有*.py文件,只留下*.pyc文件 如果我只是在.dokerignore文件中写入***.py,就会得到错误 ImportError:“ajaxfuncs”中的无效幻数:b'\x03\xf3\r\n' 因为我的原始*.py文件是用不同的python版本编译的(本地python3.6.0 docker python3.6 for alpine)

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

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

如果我只是在
.dokerignore
文件中写入
***.py
,就会得到错误

ImportError:“ajaxfuncs”中的无效幻数:b'\x03\xf3\r\n'

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

因此,作为解决方法,我将在dockerfile中构建python文件,然后删除所有py

在我的.dockerignorefile中,我首先放入:*/*.pyc

然后,在我的Dockerfile中,考虑使用python-mpy_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

如果我删除
.dockrignore
中的pyc条目,我再次得到错误:

ImportError:“ajaxfuncs”中的无效幻数:b'\x03\xf3\r\n'

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


提前感谢大家

忽略所有pyc文件似乎是避免幻数不匹配的正确做法,编译时会出现什么错误?它不应该抱怨缺少pyc,也不应该在allI上查找它们我不知道您的幻数不匹配或缺少文件的答案,但这仍然会留下一层.py文件,即使它们已从最终图像中删除。你应该做一个简单的步骤来获得一个干净的图像,而不需要一个包含它们的图层。