1. 环境准备
- upx:压缩安装包的大小
https://github.com/upx/upx
下载后放在
D:\path\Anaconda3\envs\<pkg>\Scripts\
打包的时候会看到:
- 新建一个干净的环境,只安装项目必须的包,减少打包的大小
-
pip install pyinstaller
- 自己编写的
import代码
文件需要放在D:\path\Anaconda3\envs\<pkg>\Lib\site-packages
内
2. 路径写法
代码内所有的资源路径需要调用以下函数获取,防止打包的时候找不到
# 生成资源文件目录访问路径
def resource_path(relative_path):
if getattr(sys, 'frozen', False): # 判断sys中是否存在frozen变量,即是否是打包程序
base_path = sys._MEIPASS # sys._MEIPASS在一些编辑器中会报错,不用理会
else:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
参考:https://blog.csdn.net/tm_yuyue/article/details/130472040
3. 打包
激活虚拟环境,执行打包
Pyinstaller -F -w -i xlogo.ico main.py
几百行代码,打包后是30M,还是比较大
- 打开exe后发现图片等资源没打包进去,编辑
main.spec
文件 修改pathex=[r'D:\gitcode\Python_learning\qt\multiply_show']
项目路径 修改datas=[('xlogo.ico', './'), ('qrcode_for_michael.jpg', './') ]
元组内容是(文件相对路径,文件的目录)
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['main.py'],
pathex=[r'D:\gitcode\Python_learning\qt\multiply_show'],
binaries=[],
datas=[('xlogo.ico', './'),
('qrcode_for_michael.jpg', './')
],
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,
a.binaries,
a.zipfiles,
a.datas,
[],
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon=['xlogo.ico'],
)
再执行 pyinstaller main.spec
这是第一个打包制作的电脑小程序,记录一下。
程序下载github
地址 https://github.com/kobe24o/multiplication_calculation/releases
程序演示视频:
使用python的turtle包进行乘法动画演示