解决pyinstaller打包的程序无法执行,提示Operation not permitted

在使用PyInstaller打包Python脚本后,运行时遇到'Operation not permitted'错误,原因是打包后的可执行文件在运行时需要在/tmp目录下创建临时文件夹,但该目录被设置为noexec。解决方案包括修改/tmp的mount选项或使用--runtime-tmpdir指定临时目录。
摘要由CSDN通过智能技术生成

前言

PyInstaller是一个强大的工具,它可以分析我们的python脚本,发现脚本执行所依赖的模块,并将他们打包到一个文件夹,或者封装成一个可执行文件(exe或者binary)。然后,我们就可以将这个文件(文件夹)放到其他机器上去执行,目标机器甚至可以不用安装python环境!这跟docker有异曲同工之妙。

问题描述

Centos7上,用PyInstallerpy文件打成一个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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PyInstaller 是一个用于将 Python 应用程序打包成独立可执行文件的工具,它支持 Windows、Linux 和 macOS 等平台。下面是使用 PyInstaller 打包 Python 程序的基本步骤: 1. **安装 PyInstaller**: 首先确保你已经安装了 Python,然后通过 pip 安装 PyInstaller: ```sh pip install pyinstaller ``` 2. **创建配置文件**: 使用 `pyinstaller` 命令行工具,通常在命令行中进入包含你 Python 源代码的文件夹,创建一个 spec(specification)文件。例如,如果你的主文件名为 `main.py`,则可以这样创建: ```sh pyinstaller --name=myapp main.py ``` 这将生成一个 `myapp.spec` 文件,这是 PyInstaller 需要的配置文件。 3. **编辑 spec 文件**: 可选的,如果你需要调整打包选项(如添加路径、排除模块等),可以编辑这个 spec 文件。不过对于初学者,直接使用默认设置通常是可行的。 4. **打包**: 使用命令行工具对 spec 文件进行打包: ```sh pyinstaller myapp.spec ``` 这将生成一个或多个可执行文件,具体取决于你的设置(比如是否生成单个可执行文件或包括所有依赖的 Wheel 文件)。 5. **检查输出**: 查看 `dist` 文件夹,那里会有打包后的文件。通常,`dist/myapp` 或 `dist/myapp.exe` 就是可执行文件。 6. **测试和发布**: 在不同的系统上测试你的可执行文件,确保它能正常运行。根据需求,你可能需要为每个平台单独打包
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值