【问题标题】:Docker compile python file in Dockerfile don't create pycDocker在Dockerfile中编译python文件不要创建pyc
【发布时间】:2020-02-24 14:22:57
【问题描述】:

我会在 Dockerfile 中编译我的 python 文件 (.py) 以创建 pyc 文件,然后删除所有 *.py。

我创建了一个类似 tisone 的 Dockerfile:

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

VOLUME /var/lib/cathstudio/data
WORKDIR /var/lib/cathstudio/data

COPY ./requirements.txt .

RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ENV PYTHONUNBUFFERED 1
#ENV PYTHONPATH /var/lib/cathstudio/data

COPY . /var/lib/cathstudio/data

RUN python -m compileall ajaxfuncs/

好吧,当我构建图像时,编译似乎已经完成:

但是当我在卷中浏览我的文件时,没有 pyc 文件存在:

如何在 docker build 期间编译我的 python 文件以获得 pyc s?

提前非常感谢

【问题讨论】:

  • 它们已编译,您将在__pycache__ 文件夹中找到已编译的文件。如果要将文件与原始文件放在同一目录中,则需要使用:compileall -b
  • 正如我在您的其他问题之一中提到的,VOLUME 语句可防止将来对该目录进行任何更改,您应该将其删除。
  • 谢谢@DavidMaze,我怎样才能创建一个读/写卷来以这种方式管理它?非常感谢

标签: python docker docker-build pyc


【解决方案1】:

它们已编译,您将在 __pycache__ 文件夹中找到已编译的文件。如果您想将文件与原始文件放在同一目录中,您需要使用:compileall -b

来自Docs:

-b

将字节码文件写入它们的旧位置和名称,这可能会覆盖 > 由另一个版本的 Python 创建的字节码文件。默认是将文件写入 > 它们的 PEP 3147 位置和名称,这允许来自多个 Python 版本的字节码文件共存。

【讨论】:

  • 即使我使用 -b (RUN python -m compileall -b ajaxfuncs/) 也没有在 .py 所在的目录中创建 pyc 文件。
  • 你看到@David Maze 关于你的VOLUME 声明的评论了吗?
猜你喜欢
  • 2021-06-07
  • 2022-08-24
  • 1970-01-01
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
相关资源
最近更新 更多