python - 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 文件的方法吗?
非常感谢提前
解决方案
推荐阅读
- google-sheets-api - 包含 API 密钥的 Google 表格的发布网址的正确语法是什么?
- azure - 无法使用变量在 Azure CLI 中设置 EventGrid 订阅高级筛选器
- google-app-engine - 是否可以使用 Google Cloud Logging 绘制历史数据图表?
- reactjs - React useState 无法分配 setState
- c# - Serilog 自定义输出模板
- python - 使用python进行网络抓取时如何计算缩写列表的长度
- c# - Apache Ignite.NET 十进制幅度溢出
- awk - 通过将一列中的字符串与另一个变量中的字符串匹配来子集变量
- python - 使用 boto3 创建 EBS 卷并将其附加到 EC2 实例
- laravel - 使用 Laravel 7 HTTP 客户端和 OAuth 订阅者