当前位置: 首页 > 知识库问答 >
问题:

如何为Alpine编译python?

商夜洛
2023-03-14

背景背景(原因):

我们有一个用Python编写的项目,运行在集装箱平台上。我们正在使用一个网络文件系统(基于OpenStack)来存储映像和装载,这在时间点恢复方面非常有用,但是Docker映像的大小已经开始扼杀我们的部署。

python:2.7-slim映像大约为180Mb(根据我们的代码和依赖项,大约为200Mb),大约需要45秒的时间。(有很多节点!)

我想做的事:

我想从Python代码编译一个静态二进制文件,然后我可以在一个小得多的阿尔卑斯容器上运行。

迄今取得的进展:

跑步

$ cython --embed app.py
$ gcc -I /usr/lib/python2.7 -o app app.c -lpython2.7

或者

$ pyinstaller -F app.py

产生一个ELF二进制文件,它将在一堆东西上运行(Ubuntu/Debian/Fedora/Kali/Arch)。第一个要求在目标上安装python-dev,第二个不需要,但通常比第一个慢1200%,并且对我们的一些代码有困难。

龙在哪里:

在Debian上编译和运行应用程序效果良好。

$ docker run -v `pwd`/app:/app debian:jessie /app
* The application has run successfully...

但阿尔卑斯似乎失败了。

$ docker run -v `pwd`/app:/app alpine:latest /app
standard_init_linux.go:178: exec user process caused "no such file or directory"

我怀疑这是因为libc的动态需求。所以6,但我似乎不知道如何在不动态要求libc的情况下使用GCC创建静态二进制文件?

共有1个答案

叶煌
2023-03-14

这是因为alpine使用musl libc,静态构建或使用alpine构建二进制文件都足以让它运行。但是还有第三个延迟选项,即要么安装glibc,要么更延迟地使用已经安装glibc的alpine映像。这张图片是弗罗夫拉德/阿尔卑斯山神格利伯。

 类似资料:
  • 问题内容: 编译Xcode Project失败,并出现以下错误: “文件/ Users / * /Git/ocr/opencv2.framework/opencv2中缺少必需的体系结构arm64” 如果我将Architectures(在Build Settings下)更改为(armv7,armv7s)而不是(armv7,armv7s),它会很好地工作。 如何更改opencv python构建脚本,

  • 问题内容: 如何将我的Python应用程序转换为?我编写了一个程序,想知道如何使其他人使用它。我使用Python 3.3。我搜索了一下,但找不到任何东西。 问题答案: cx_Freeze这样做,但是创建了一个具有很多依赖关系的文件夹。py2exe现在执行此操作,并使用 –bundle-files 0选项,仅创建一个EXE,这可能是对您问题的最佳解决方案。 更新:遇到py2exe无法“查找”的第三方

  • 我正在玩基于Windows上的MoarVM构建的perl6版本。我创建了一些perl6文件并想将其编译为exe。我尝试了以下操作: 现在我想把r编译成可执行文件 我发现这个链接谈论如何使用鹦鹉,但我正在使用MoarVM目标:http://perlgeek.de/blog-en/perl-6/my-first-executable.writeback 我的问题如何将MoarvVM目标文件编译为Win

  • 这部分内容将告诉你,在不同的win32平台上,如何编译WinPcap。源代码可以在WinPcap 网站上获得。 编译驱动 编译NPF时,有两个主要的路径:Windows NTx和Windows 9x。注意,因为NPF驱动是与平台相关的,所以,为了连接正确的DDK库,我们强烈建议编译的时候,要选择将来会被使用的那个操作系统。比如,如果你使用Windows NT 4 DDK库赖编译驱动,那么在Wind

  • IDEA有一个很棒的内置功能-反编译器。它工作得很好。我可以复制源代码,但我找不到将所有反编译的java类提取到java文件的选项 这个项目有很多java类和包,所以我很想手动复制它 有人知道如何提取到java源文件吗。谢谢