Bug2:python64位打包程序无法在win7 32位上运行

2023-10-11 16:50

本文主要是介绍Bug2:python64位打包程序无法在win7 32位上运行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:这篇文章主要记录一下,python打包时出现的坑,这里面主要包含两个坑,按需要查看解决方法,文章的最后是存放两个方法的总体解决方法(可以直接解决两个问题),点击点击跳转

1 项目场景:

1.1 环境需求:

​ 使用当前手头上的电脑环境,进行编译公司的代码。

要求:exe程序可以在windows7 32系统和windows10 32位上可以运行。

当前环境:python3.9-64位,Windows10系统

1.2 初步解决思路:

使用pythonpyinstaller库对python代码进行打包。

pyinstaller安装:在PyCharm上的解析器上搜索下载pyinstaller库,或者使用cmd终端输入pip install pyinstaller进行安装。

注意:在安装前需要先去查看一下pyinstaller是否支持你当前的python版本。不过一般情况下都是符合的,除非你使用的python版本很老,然后pyinstaller版本又很高就会发生不匹配。

2 遇到问题描述:

2.1 问题1:64位python打包的程序无法在32位windows7上运行

在终端上输入打包指令。-D指打包完成后生一个多文件的exe程序,-i是添加公司的图标,后面要编译的文件是项目中所有的py文件。

pyinstaller -D -i 图标文件 要编译的py文件

结果在Windows7 32位上执行弹窗报错:此文件的版本与正在运行的Windows版本不兼容,请检查计算机的系统以了解需要x86(32位)还是x64(64位)版本的程序,然后联系软件发布者。

在这里插入图片描述

2.1.1 原因分析:

​ 很显然,在windows7上的弹窗已经告诉我们了,在windows 32位的环境下不支持python 64位编译出来的应用程序。

​ 这其中的原因应该是在于我们python安装的pyinstaller模块。首先我的python环境是python3.9 64位。那么他打包出来的就是64位的包。这就是为什么64位的exe不能在32位执行的原因。

2.1.2 解决方案:

​ 由于我询问了做C++底层的同事,他们主要的是编译成32位的动态库。再加上我需要运行的系统是win7 32位。所以我索性把我的python3.9 64位直接卸载使用python3.9的32位。

​ 重新打包成新的exe程序。这时window7 32位上就不会报位数不相符的弹窗了。

在此,如果你的电脑是Windows10 64位系统,python32位那么你编译出来的应用程序应该就能在Window10 32位系统上跑了。但是如果你要运行的exe环境是win7 的32位 那么你可能就会遇到下面的问题2。


2.2 问题2:win10打包应用程序在win7运行弹窗报错说缺少api-ms-win-core-path-l1-1-0.dll

​ 解决上面的问题1后,我本以为我在python打包的条路上算是走到头了,结果直接报出这个错误……

​ 报错信息:无法启动此程序,因为计算机中丢失api-ms-win-core-path-l1-1-0.dll。参数重新安装程序已解决此问题。

在这里插入图片描述

2.2.1 原因分析

​ 此处再次声明一下问题出现的原因:我使用win10 的python3.9 32位打包后的应用程序放到win7 32位下运行报的错误。

问题原因未知,但是我确定报错问题不是说这台win7 32位的设备缺少api-ms-win-core-path-l1-1-0.dll这个动态库,而是出在python上

​ 因为我同事也是用win10系统 python 32位打包程序,但是他的应用程序在这个win7 32位上能完美运行。

2.2.2 踩坑经历:

​ 此处主要说一下我踩过的坑,问题2的解决方法点击跳转。

​ 我在网上也查找了相关方案,但是仍然解决不了我的问题……

​ 我先罗列一下我的一些操作,可能发布这些解决方法的博主可以解决他们相关的问题。但是对于我的问题可能不太适用。

2.2.2.1 不适用的解决方法1

​ 单纯看这个报错,应该是我要运行exe的win7 32位电脑上缺少了api-ms-win-core-path-l1-1-0.dll这动态库。

​ 按照提示信息,我下载了api-ms-win-core-path-l1-1-0.dll这个库,然后按照其他博主的方法放到了system32文件夹下。虽然他这个方法解决了弹窗报错,但是我发现我的exe执行会发生闪退问题!exe闪退的可能因素非常多。

​ 我再使用cmd终端来执行我的exe,这样就能看到执行期间的结果。不过结果报的错误很不友好,甚至在CSDN上都没有相关的解决方法,他的大概意思就是执行exe时发现一个错误的同时又发生其他错误。由于bug特别长我就没有截图。最后由于长时间没有找到解决方法我就放弃了该方法。

2.2.2.1 不适用的解决方法2

​ 我接着从源头上找解决问题的方法,我在pyinstaller的打包过程中发现,在打包时出现一下几种警告。

WARNING: Hidden import "sip" not found!
WARNING: lib not found: api-ms-win-core-winrt-string-l1-1-0.dll
WARNING: lib not found: api-ms-win-core-winrt-l1-1-0.dll
……
还有很多警告WARNING: lib not found: api-ms-win-core-***-l1-1-0.dll

​ 那就按这些警告一个一个解决。

​ 首先WARNING: Hidden import “sip” not found!是指没有安装隐藏模块sip。可我按照网上很多方法安装,都是安装失败,原因在于我电脑上安装了VS2003,但系统使用VS2003的编译器的时候编译sip模块时出错导致安装不上。

​ 因此我就安装了一个window7 32位的虚拟机想来解决问题安装不了sip库的问题……结果居然解决了win7不能运行的问题了(详细解决方法见下解决方法。后来我发现好像有没有安装sip模块好像都没有问题……

​ 由于在解决sip问题中就解决了win7上不能执行exe问题,所以后续的那些缺少动态库的警告我就没有去管了。网上也有相关处理缺少动态库的方法,虽然没有亲身试验,不过应该可以解决那些警告问题。

2.2.3 解决方法:

  1. 先安装一个虚拟机VM。然后再去下载win7的镜像文件。这一步骤在网上有很多的参考方法。
  2. 下载安装python3.7 32位,这里需要和根据你要运行exe的环境看齐,比如你和我一样要在win7 32位下运行python的exe。那么就安装32位的。
  3. 在win7中安装python程序所需要的各个库,顺便安装个pyinstaller库用于打包程序

​ 经过测试,win7下打包的exe可以在win7上跑,也可以在win10上跑,之后,我打包文件都放在这个win7的虚拟机中打包。

​ 但是同事却能在win10上打包,而且可以在win7和win10上跑,相同的方法打包,它可以我却不行,具体解决方法见总体解决方案

注意:win7下只能下载安装python3.9以下(不包含python3.9)的版本。因为python3.9已经不再支持win7了。

总体解决方案

​ 由于在上文中,我虽然解决了win7上运行公司代码的问题。但是总的来说,这并不是从根本上解决问题。我想要解决的是在win10上编译打包,并且满足所有windows系统可使用。

  1. ​ 安装Anaconda32位 https://www.anaconda.com/download/ 这里我是因为我的需要才安装了32位的Anaconda,你可以根据你自己的选择。这里不再有过多的叙述,相关安装教程在其他博主中有更详细的讲解。

在这里插入图片描述

  1. Anaconda新创建一个python环境,这里我安装的是python3.7
conda  create -n python37  python=3.7

​ 这句话的意思是创建一个python3.7的新环境,并且名命为python37。你也可以根据你的需要做更改。-n后面更新环境的名字,python=后面跟python的版本。

如果你忘记环境的名字就在终端中使用

conda env list

来查询以前创建的环境。

在这里插入图片描述

这里要注意一下,cmd终端和Anaconda的终端是不一样的。cmd是用于系统所有操作命令的终端,而Anaconda的终端一般就是为了Anaconda而设计的Anaconda的终端在win10的开始中打开
在这里插入图片描述

Anaconda的终端一打开会有(base)字样在开头如下:

在这里插入图片描述

  1. 切换环境

    刚开始的时候,为base环境(默认环境)。

在这里插入图片描述

执行activate 环境名  如下即可切换环境(python37是我创建环境的名字):```
activate python37
```

在这里插入图片描述
然后再自己新建的环境中安装模块。使用pip install ... 的方法来安装模块。

如果嫌麻烦也可以将这个环境链接到pycharm

在这里插入图片描述
在这里插入图片描述

这里我的pycharm是2021版本的,其他版本的类似

  1. 选择Conda环境
  2. 选择现有的编译器
  3. 找到Anaconda安装路径下的一个文件叫envs在里面找到你新建的环境,然后再进去找到python.exe文件。那个Conda可执行文件是默认的不用管。

比如我的就是D:\Users\Administrator\anaconda3\envs\python37\python.exe

在这里插入图片描述

选则好解析器后,我们就可以开始安装模块了。然后再pycharm的终端中打包后的exe文件就可以放到win7中运行了。

这篇关于Bug2:python64位打包程序无法在win7 32位上运行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/l1206715877/article/details/119575654
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/189461

相关文章

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

Flutter打包APK的几种方式小结

《Flutter打包APK的几种方式小结》Flutter打包不同于RN,Flutter可以在AndroidStudio里编写Flutter代码并最终打包为APK,本篇主要阐述涉及到的几种打包方式,通... 目录前言1. android原生打包APK方式2. Flutter通过原生工程打包方式3. Futte

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

Flask解决指定端口无法生效问题

《Flask解决指定端口无法生效问题》文章讲述了在使用PyCharm开发Flask应用时,启动地址与手动指定的IP端口不一致的问题,通过修改PyCharm的运行配置,将Flask项目的运行模式从Fla... 目录android问题重现解决方案问题重现手动指定的IP端口是app.run(host='0.0.