繁体   English   中英

python + pyinstaller是否支持Linux的多个OS /版本?

[英]Does python + pyinstaller support multiple OS/Versions of linux?

我已经用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目标)在不同操作系统上构建二进制文件的通用方法吗?或者我正在做的事情是破解/错误的解决方法这个问题?

我试图了解如何以标准方式解决此问题。

只要pyinstaller生成的二进制文件仅取决于glibc,那么在可用的最旧的系统上构建它应该是一种有效的方法,并且它应该在将来的系统上运行。

通常,glibc设计为向后兼容,因此针对较早版本的glibc构建的应用程序仍将与更新的glibc一起运行,反之则不然。 它通过符号版本控制来做到这一点,在该版本中,链接到的每个符号都可以具有与其相关联的版本,并且在任何情况下,如果新的glibc更改了某些功能的ABI,它还将具有与暴露的旧ABI的兼容性例程。使用较旧的符号版本,以便与旧版本链接的应用程序将与兼容性例程动态链接,而如果您有与较新的符号版本链接的应用程序,则较旧的glibc中不会有较新的版本来动态链接至。

尽管其他库也可以做到这一点,但没有多少库作者会为此而烦恼,因此较新的版本可能根本不兼容,而glibc开发人员通常会尝试保持兼容性。

因此,是的,只要最终二进制文件仅链接到glibc或遵循类似符号版本控制方案的其他库,以确保较旧的二进制文件仍可正确链接至该库的较新版本,则针对较旧的库进行构建是完全有效的版本,然后在各种Linux发行版的较新版本上运行它,甚至在各个发行版上也可以运行。

不幸的是,如果链接到较新的glibc,没有很好的方法让链接器选择较旧的符号版本,因此,通常最简单的方法是在Docker或其他类型的容器中,该容器包含具有较旧glibc的较旧发行版。您想要与之兼容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM