目录
壹、方法简介
贰、安装32位python
一、下载安装包
二、安装python
叁、安装第三方库
一、检查安装
二、安装第三方库与pyinstaller
三、pyinstall
肆、打包exe文件
一、配置.spec文件
二、打包!打包啦!
伍、验收
陆、后记
参考资料
壹、方法简介
哇,这个问题整了我一个早上,终于解决,发个文章说一下,以此记录。
网上流行两个办法,用
anaconda布置32位python虚拟环境
或者
下载,使用32位python的pyinstaller。
我用anaconda就是无法布置虚拟环境,并且anaconda下载,安装都超级慢,所以我推荐你使用第二种办法。
(如果你的anaconda可以顺利布置虚拟环境,那你当我没说,你可以去看这篇文章,顺路帮我看看有没有用)
提示:
本文介绍的是如何使用32位python打包exe文件,不会介绍使用anaconda的办法
贰、安装32位python
一、下载安装包
先去下载32位的python(一定是32位的!!)
下载链接
点击这里,下载32位的python安装包
提示:
如果你不想下载3.9.7也可以,版本可以随意
二、安装python
双击运行安装包
一定要把add python to path勾选!!!自己配置环境变量会很麻烦。主要是我懒得教你配置环境变量
然后选择箭头指向的自定义安装
接着勾选pip,这样可以安装第三方库,其他默认即可
如果有需要更改安装路径的在此处更改
建议:
自己创建一个文件夹,放在较浅的目录,windows默认安装目录很深,文件夹最好起一个与原64位python有区别的名字(例如我起的是python32bit)然后把32位python安装在此文件夹下
点击install,一小会之后,python32位就安装好啦!
叁、安装第三方库
一、检查安装
进入刚刚安装的python32位的文件夹
注意!
接下来文章中的“python”指的都是刚刚安装的32位python,而不是原来的64位
首先记得更改一下python.exe的名字(例如改成python32.exe),才能在cmd上与原64位python区分开
打开命令提示符cmd(powershell也行)
提示:
win+r快捷键,然后输入cmd,就可以打开命令提示符
输入(就是你刚刚更改python.exe的名字)
python32
如果有类似输出就没问题了
注意检查一下红框处,确认安装的是32位
提示:
输入
exit()
可以退出python控制台
二、安装第三方库与pyinstaller
然后你如果在项目中有使用第三方库(例如我有使用pygame)
用此命令安装
python32 -m pip install <包名>
不要漏了前面的python32!!否则就会安装到原64位的python上
提示:
如果安装太慢可以使用镜像安装
python32 -m pip install -i http://pypi.tuna.tsinghua.edu.cn/simple/ <包名>
三、pyinstall
最后也要记得把pyinstaller安装上
python32 -m pip install pyinstaller
还要安装它的依赖模块
python32 -m pip install pywin32
接着找到python32的安装位置,进入Scripts文件夹
四处看一看……
好!这就彳亍了 ,接下来就全靠pyinstall.exe这个应用程序了
肆、打包exe文件
大多数网上的文章都说一个命令可以解决大部分情况,然而事实是
那我们应该怎么做呢?
一、配置.spec文件
新建一个<filename>.spec文件,名字可以随意,放在python32安装目录的Scripts文件夹下
源代码可以不用放入此文件夹中
提示:
可以使用记事本打开,我使用的是sublimetext文本编辑器,有兴趣的可以查看这篇文章
此处我以我自己编写的扫雷游戏为例(使用模块pygame)
打开,将代码复制进去
# -*- mode: python ; coding: utf-8 -*-block_cipher = Nonea = Analysis(['<源代码路径1>','<源代码路径2>'],#可以有多个源代码路径pathex=['<源代码所在主文件夹>'],binaries=[],datas=[(<资源路径>,<资源输出路径>)],#可以有多个元组#输出路径为相对路径,相对于pyinstaller自动创建的输出文件夹#若有需直接放入输出文件夹的文件,datas中元组第二项可以为'.'hiddenimports=[<遗漏模块补充>],hookspath=[],hooksconfig={},runtime_hooks=[],excludes=[],win_no_prefer_redirects=False,win_private_assemblies=False,cipher=block_cipher,noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,cipher=block_cipher)exe = EXE(pyz,a.scripts, [],exclude_binaries=True,name='<app名>',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,console=False,disable_windowed_traceback=False,target_arch=None,codesign_identity=None,entitlements_file=None )
coll = COLLECT(exe,a.binaries,a.zipfiles,a.datas, strip=False,upx=True,upx_exclude=[],name='<输出文件夹名>')# -*- mode: python -*-block_cipher = None
模块遗漏问题:pyinstaller在进行打包时,会解析打包的python文件,自动寻找py源文件的依赖模块。但是pyinstaller解析模块时可能会遗漏某些模块(not visible to the analysis phase),造成打包后执行程序时出现类似No Module named xxx。这时我们就需要在Analysis下hiddenimports中加入遗漏的模块。
例如:你遗漏了pandas模块,则hiddenimports应该写成这样
hiddenimports=[
'pandas',
'pandas._libs',
'pandas._libs.tslibs.np_datetime',
'pandas._libs.tslibs.timedeltas',
'pandas._libs.tslibs.nattype',
'pandas._libs.skiplist',
]
根据错误信息自己补全列表
注意!
阅读完后要将格式代码中的注释全部删掉。
主要是我也不知道会发生什么事情
示例代码:
# -*- mode: python ; coding: utf-8 -*-block_cipher = Nonea = Analysis(['D:\\python32bit\\Scripts\\pyinstaller32bit\\minesweeper\\minesweeper.py',],pathex=['D:\\python32bit\\Scripts\\pyinstaller32bit\\minesweeper'],binaries=[],datas=[('D:\\python32bit\\Scripts\\pyinstaller32bit\\minesweeper\\images','images')],hiddenimports=[],hookspath=[],hooksconfig={},runtime_hooks=[],excludes=[],win_no_prefer_redirects=False,win_private_assemblies=False,cipher=block_cipher,noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,cipher=block_cipher)exe = EXE(pyz,a.scripts, [],exclude_binaries=True,name='minesweeper',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,console=False,disable_windowed_traceback=False,target_arch=None,codesign_identity=None,entitlements_file=None )
coll = COLLECT(exe,a.binaries,a.zipfiles,a.datas, strip=False,upx=True,upx_exclude=[],name='minesweeper')# -*- mode: python -*-block_cipher = None
根据需要自行补全<括号>中的信息,并将括号替换为引号,然后保存退出
注意!
路径中的分隔符"\"要写成"\\"的形式,别问我为什么,问它
二、打包!打包啦!
终于,在经历一大堆繁杂的步骤之后,我们开始打包!
使用管理员权限打开cmd命令提示符(或者powershell)
进入python32安装目录下的Scripts文件夹
使用命令
python32 pyinstaller.exe -D <.spec文件名>
解释一下:
"-D"是会生成一系列支持文件,放在输出文件夹中,若将"-D"替换为"-F"就只会生成一个.exe文件
应用打开后会弹出一个黑色窗口(就是cmd),如果不想这样的话,则在"-D"后加入" -w"(别忘了空格)。
但两者都不建议替换,因为弹出cmd窗口可以显示错误信息(就是traceback),使用"-F"生成的单个.exe文件必须要使用cmd启动应用,不可以双击启动。
不出意外的话,你会看到一大堆输出,我相信我们都看不懂,有问题吗?没有问题。只要看最后一行
好!
伍、验收
回到Scripts文件夹,会发现多了两个文件夹在里面
bulid可以直接删除,不会有任何影响。
dist里面就是输出文件夹,打开来,翻一翻
有个minesweeper.exe,打开,一切顺利!
陆、后记
哇,真的不容易,终于码完啦!
希望本文章能为在互联网上苦苦寻找资料的你有所帮助,我也是翻了了好久资料,把32位python卸了又装,卸了又装,写文章中途还差点翻车
还好还是终于写到了这里,CSDN新人,python新手,如有错漏之处请指出,我会认真认错,坚决不改认真改正。
至于文章中提到的扫雷程序,这里有链接,有兴趣的可以拿去玩
链接:在这里
提取码:a3fe
还有还有,如果你想最后卸掉python32的话,要把python32.exe的名字改回来,要不然......
参考资料
Pyinstaller 打包发布经验总结_YanHua_jake的博客-CSDN博客
如何使用pyinstaller打包32位的exe_weixin_34087503的博客-CSDN博客