关于 运行 各种体系结构和操作系统上的可执行文件的问题

Question about running executables on various architectures and OSs

我正在开发一个 python 代理,我想在各种环境中 运行 本机(基本上不同的 docker 图像,但不一定)。但是我真的不知道在这个低级别区域是如何工作的。

我使用 pyinstaller 编译了这个项目,它 运行 在我的机器上成功了。 在文档上,写着我应该在我想要 运行 的机器上编译项目,但我确实想为可执行文件准备各种版本,以便它能够 运行提前了解一下,但我不知道我需要考虑的标准是什么。

如果我想在各种docker图像上运行代理,我需要注意哪些规范?建筑学? OS?海湾合作委员会版本?基本图像?

编译尽可能多的二进制文件以支持各种 docker 图像的最佳方法是什么?

例如,如果我在 alpine 图像上编译项目,是否意味着它会在所有基于 alpine 的 docker 图像上 运行?

欢迎任何建议。

谢谢!

如果您只有一个 Python 脚本,该脚本本身(可能)是可移植的,并且可以 运行 在任何系统上在任何 OS 上的任何体系结构上具有Python 口译员。这不是一个困难的要求——Linux 和 MacOS 系统通常都预装了 Python——如果便携性对你很重要,我会尽量保持接近尽可能地到一个纯粹的Python环境。

将 Pyinstaller 引入画面后,您就创建了一个不可移植的二进制工件。您需要在每个不同的 OS 和每个您想要 运行 的不同架构上重新 运行 Pyinstaller (Linux/x86, Linux/ARM, MacOS/x86、MacOS/ARM、Windows/x86,并且可能将 musl [Alpine] 与 glibc [Debian] 建立在 Linux 之上)分开。这真的没有任何捷径。

原则上 Docker 看起来可以通过 运行 将所有内容都置于 Linux 下来简化这一点。您仍然需要创建单独的 x86 和 ARM 工件。一旦它被嵌入到 Docker 图像中,您就不需要为不同的 Linux 发行版创建单独的构建,您只需要 运行 预编译图像。但是,主机需要安装 Docker(默认情况下几乎肯定不会),并且根据您的代理报告的具体内容,它可能会受到 运行ning 的阻碍隔离环境(在非 Linux 主机上的 Linux 虚拟机中)。