【发布时间】:2025-11-23 04:20:17
【问题描述】:
我在 python 中编写了几个小脚本,并使用 pyinstaller 构建了二进制文件。
当我在我的 Ubuntu 16.04 机器上构建它们时——它们会在我构建它们的机器上运行良好。但是将文件移动到 Centos / Redhat 7.4 机器会给我 GCLIB 和其他 .so 版本依赖错误。
- 使用相同版本的 Centos 在 docker 上构建相同的二进制文件不会出现这些错误。
- 如果我尝试在 Centos 6.6 上运行在 Centos 7.4 上编译的二进制文件,我会再次遇到错误 -- 但在 Centos 6.6 上构建它可以在 Centos 6.6 上正常工作
我现在已经使用较低版本的 Centos 来构建我的二进制文件解决了这个问题。
- 我的具体问题是——在 Python 中,它是基于目标操作系统(仅假设 linux 目标)在不同操作系统上构建二进制文件的常用方法,还是我正在做的是 hack/坏解决这个问题的方法?
我正在尝试了解如何以标准方式解决此问题。
【问题讨论】:
-
Pyinstaller 在 Linux 上并不是什么大事。 Windows 作为目标操作系统更为常见。在 Linux 上,更多的包是通过
pip安装的,它也负责二进制依赖。但是它们是有问题的,因为需要安装完整的构建系统和库。有像 Docker 或 AppImage(以及更多)这样的系统以空间为代价来解决这个问题。 -
你需要你的脚本是二进制文件吗?因为如果没有,那么你的问题实际上已经解决了。如果需要,您仍然可以为 Windows 构建。或者您可以阅读
snap之类的软件包。 -
这些是脚本,但它们有时可能需要连接到数据库,然后使用外部库。目标服务器无法访问 Internet。这让我可以选择构建二进制文件并与运营团队共享。提供一个完整的依赖文件夹(我不确定它是否总是有效)或设置一个 pip repo(服务器没有互联网访问权限)。阅读@Brian Campbell 的回复。 Docker 似乎是一种合理的方式,可以让操作更轻松。
标签: python linux pyinstaller software-distribution