admin 管理员组

文章数量: 887006

使用Pyinstaller打包Python项目至win7运行报错问题,已解决

之前有个项目是在win11开发的,但是客户要求将项目部署到win7端,并且是打包成可执行文件.exe。刚开始很顺利,开发-打包-测试,没曾想移植到win7的时候突然间报错。明明在Pyinstaller工具打包过程中,项目中所有的依赖库都打包进去了。就纳闷为什么无法运行。

报错

分析

初步判读可能是win7win11的系统版本兼容性不同,所以项目需要的某个系统文件缺失,那就找个地方下载给他补进去。

脚本下载:到百度直接搜索脚本名字api-ms-win-core-path-l1-1-0.dll 随处可见下载链接
解决方法一

把下载好的文件(api-ms-win-core-path-l1-1-0.dll)放到你的系统路径。它的默认路径是在:

C:\Windows\System (Windows 95/98/Me),

C:\WINNT\System32 (Windows NT/2000),

C:\Windows\System32 (Windows XP, Vista, 7, 8, 8.1, 10)。

在 64位 Windows 上,32位 DLL 文件的默认路径是

C:\Windows\SysWOW64\, 64 位 DLL 文件在

C:\Windows\System32\ 。

确保覆盖已有的全部文件(但保留一个原文件备份),然后重启电脑。

解决方法二
  如果问题仍未解决,按以下步骤注册 DLL 文件:

32 位 DLL 文件用在 32 位 Windows 上,

64 位 DLL 文件用在 64 位 Windows 上:

打开一个提升权限运行的命令行窗口。

具体操作是点击“开始”,点击“所有程序”,点击“附件”,右键点击“命令提示符”,然后点击“以管理员权限运行”。

在 Windows 8/10 中,前往“开始”界面。键入“cmd”, Windows 会找到“命令行提示符”。右键点击“命令提示符”,选择“以管理员权限运行”。

如果要求输入管理员密码或确认,输入密码,或点击“允许”。

输入 regsvr32 “filename“.dll 然后按下回车。

将 32 位 DLL 文件注册到一台 64 位 Windows 上:

按前述方法打开一个提升权限运行的命令行窗口。

在命令行中键入:

cd c:\windows\syswow64\

然后键入以下命令并回车:

regsvr32 c:\windows\syswow64\”filename“.dll

解决方法三
  下载一个驱动精灵,点击系统检测,电脑缺少什么文件都可以检测出来。检测好了之后软件会提示需要安装什么,提示:必要系统组件几个等等,然后点击进去安装就是了。安装完成记得重启一下,就修复完成了!

再次测试

再次测试之后,上面的保存已经不存在了,但是出现了其他报错。

SystemError: Negative size passed to PyUnicode_New

经查询之后发现是编码报错,查询到的几乎所有帖子都是说将utf-8编码改为gbk编码
考虑过后发现工作量非常大,毕竟代码里面涉及到了路径参数。
最后我考虑有没有可能win7的版本太老,而我们目前用的python版本太过于超前,才导致的不兼容问题。

验证猜想

我重新创建一个python虚拟环境win7py python==3.5

随后在这个虚拟环境下使用Pyinstaller工具再次打包项目,再迁移到win7系统上面就发现可以运行

本文标签: 不兼容 pyinstaller 亲测已