首页 > 解决方案 > Ubuntu 上使用的 PyInstaller - CentOS 上使用的压缩文件 - 错误

问题描述

我有 python 代码,我用 PyInstaller 3.5 压缩了它。我的开发者。env 是一个 Ubuntu 18.04 服务器,但客户希望在 CentOS 7.6 上运行和使用压缩的 python 脚本

我收到了错误堆栈的反馈:

Traceback (most recent call last):
  File "site-packages/PyInstaller/loader/rthooks/pyi_rth_certifi.py", line 11, in <module>
  File "/tmp/pip-install-16KWaj/PyInstaller/PyInstaller/loader/pyimod03_importers.py", line 395, in load_module
  File "ssl.py", line 98, in <module>
  File "/tmp/pip-install-16KWaj/PyInstaller/PyInstaller/loader/pyimod03_importers.py", line 684, in load_module
ImportError: /usr/lib64/libc.so.6: version `GLIBC_2.25' not found (required by /tmp/_MEIhotjJf/libcrypto.so.1.1)
[22972] Failed to execute script pyi_rth_certifi

这是否意味着需要在 CentOS 7.6 上压缩 python 代码还是有其他问题?我已经检查了我的 dev.environment 中的压缩代码并且它运行良好......这就是我认为操作系统差异可能导致错误/问题的原因。

标签: pythonpython-3.xpython-2.7pyinstaller

解决方案


PyInstaller 只会针对它执行的平台进行编译。虽然 CentOS 和 Ubuntu 都是 Linux 发行版,但这并不意味着它们的构建方式相同!CentOS 中很可能缺少一些存在于 ubuntu 上的库。

这个理论更有可能看到编译后的二进制文件将在您的 ubuntu 中运行,而不是在 CentOS 中。对我来说,这表明您的编译没有任何问题(没有丢失外部文件或错误编译的依赖项),但是 /usr/lib64/libc.so.6: version `GLIBC_2.25' 程序需要并存在在 Ubuntu 上可能不存在于 CentOS 上。

在 CentOS 上编译程序很可能会导致 PyInstaller 检测到这个缺失的依赖项并将其添加到已编译的二进制文件中。

要测试的第一件事是尝试在 CentOS 上运行您的 python 脚本,看看这是否会在 IDE 中引发任何错误。如果没有,那么下一步是尝试直接在 CentOS 上编译。如果脚本没有引发错误,那么编译应该适用于该操作系统,PyInstaller 的压缩输出也应该适用。


推荐阅读