Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法将Python程序编译成二进制并与Scratch Dockerfile一起使用?_Python_Docker - Fatal编程技术网

有没有办法将Python程序编译成二进制并与Scratch Dockerfile一起使用?

有没有办法将Python程序编译成二进制并与Scratch Dockerfile一起使用?,python,docker,Python,Docker,我最近一直在玩docker的图片。我看到了如何从头开始使用。我试着看看我能走多远只是为了好玩。我用python编程。文档要求将示例C程序编译为二进制文件,将其复制到容器中,然后运行它。在容器中,我无法运行python。我看到了关于将python文件编译为二进制文件的内容,这符合我们这里的测试用例。它提到使用pyinstaller。因此,我在一个测试hello.py文件上运行它,该文件只打印hello和pyinstaller hello.py,我得到了一堆关于构建项目的消息。好的,很好。我可以通过

我最近一直在玩docker的图片。我看到了如何从头开始使用
。我试着看看我能走多远只是为了好玩。我用python编程。文档要求将示例C程序编译为二进制文件,将其复制到容器中,然后运行它。在容器中,我无法运行
python。
我看到了关于将python文件编译为二进制文件的内容,这符合我们这里的测试用例。它提到使用
pyinstaller
。因此,我在一个测试
hello.py
文件上运行它,该文件只打印hello和
pyinstaller hello.py
,我得到了一堆关于构建项目的消息。好的,很好。我可以通过运行“dist/hello”(这是帖子中提到的二进制程序)在本地机器上运行二进制文件。因此,我编写Dockerfile来复制并运行该程序。我的Dockerfile是

FROM scratch

ADD dist/hello /
CMD ["./hello"]
我运行
docker build.-t“hello:1.0”
,然后
docker运行hello:1.0
和。。。。 我收到一个错误消息:

standard_init_linux.go:211: exec user process caused "no such file or directory"

给出了什么?我做错了什么?有可能让pyinstaller编译一个二进制python项目(多个文件,而不仅仅是这个文件)吗,然后使用scratch映像运行它。如果可能的话,是否有任何警告?

因此答案是使用Google的Distorless映像。他们的github上有一个示例,我稍微编辑了一下如下:

# Build a virtualenv using the appropriate Debian release
# * Install python3-venv for the built-in Python3 venv module (not installed by default)
# * Install gcc libpython3-dev to compile C Python modules
# * Update pip to support bdist_wheel
FROM debian:buster-slim AS build
RUN apt-get update && \
    apt-get install --no-install-suggests --no-install-recommends --yes python3-venv gcc libpython3-dev && \
    python3 -m venv /venv && \
    /venv/bin/pip install --upgrade pip

# Build the virtualenv as a separate step: Only re-execute this step when requirements.txt changes
FROM build AS build-venv
COPY requirements.txt /requirements.txt
RUN /venv/bin/pip install --disable-pip-version-check -r /requirements.txt

# Copy the virtualenv into a distroless image
FROM gcr.io/distroless/python3-debian10
COPY --from=build-venv /venv /venv
COPY . /app
WORKDIR /app
ENTRYPOINT ["/venv/bin/python3", "hello.py"]
如果有人想知道,就把这个贴出来。这绝对是件很酷的事情


请注意,我不确定这是否重要,但在你的链接问题中,它告诉你它实际上并没有生成二进制。
pyinstaller
只是简单地打包所有内容,它不会从Python代码生成本机代码。@juanpa.arrivillaga很好地解释了这个问题。那么有没有办法得到那个甜美的二进制文件呢……我正在尝试要这样做,也会得到相同的错误“standard_init_linux.go:211:exec user process-cause”没有这样的文件或目录"但是我的博客说:scratch image只能由go project使用。我试过了,go project成功了,python项目只能在系统级通过编译文件运行,比如在python上编译。36.debian,在debian上运行。这种方式可以,但还不够好。希望能帮到你。@Dviad Frick帮不了我,因为我只想用bi不,制作一个更小的图像(python应用程序映像构建总是500-1000MB,基本Linux系统映像debian buster slim和python总是150MB?与go应用程序相比,太大了?你关于python项目的映像总是有多大?@David Frick使用python。它是一个很大的包,非常大。当我安装pip-r requirements.txt时,它会非常大,而且,总是需要要执行一些针对python包的apt安装,请参阅更多。