前言
PyInstaller是一个强大的工具,它可以分析我们的python脚本,发现脚本执行所依赖的模块,并将他们打包到一个文件夹,或者封装成一个可执行文件(exe或者binary)。然后,我们就可以将这个文件(文件夹)放到其他机器上去执行,目标机器甚至可以不用安装python环境!这跟docker有异曲同工之妙。
问题描述
在Centos7上,用PyInstaller将py文件打成一个binary,把该可执行文件放到其他的Centos7上去执行,结果报如下的错误:
error while loading shared libraries: libz.so.1: failed to map segment from shared object: Operation not permitted
问题定位
一般Operation not permitted都是权限不足导致的,但是看了一下文件,是有执行(x)的权限的。
把这个文件放到其他的机器上去执行,发现有的机器可以跑,有的机器不能跑!所以肯定是机器配置上的差异。
回到PyInstaller官网,看到如下介绍:
The bootloader is the heart of the one-file bundl