第一步:安装 Pyinstaller
pycharm的话直接到镜像地址装包
使用pip安装的使用命令行:
记得先把pip的位置添加到环境变量。
默认pip的位置在python安装目录的scripts里。
也可以指定pycharm给你创建的python工程文件里面的pip
比如:
我把这两个地方都加到环境变量中了:
放在上面的黄色框那个pip会优先生效!
最后是:pip安装轮子的命令(使用清华镜像地址安装美滋滋~)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller
Pyinstaller开始打包
(一)命令行来打包:
官方帮助:
usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME]
[--add-data <SRC;DEST or SRC:DEST>]
[--add-binary <SRC;DEST or SRC:DEST>] [-p DIR]
[--hidden-import MODULENAME]
[--additional-hooks-dir HOOKSPATH]
[--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES]
[--key KEY] [-d {all,imports,bootloader,noarchive}] [-s]
[--noupx] [--upx-exclude FILE] [-c] [-w]
[-i <FILE.ico or FILE.exe,ID or FILE.icns>]
[--version-file FILE] [-m <FILE or XML>] [-r RESOURCE]
[--uac-admin] [--uac-uiaccess] [--win-private-assemblies]
[--win-no-prefer-redirects]
[--osx-bundle-identifier BUNDLE_IDENTIFIER]
[--runtime-tmpdir PATH] [--bootloader-ignore-signals]
[--distpath DIR] [--workpath WORKPATH] [-y]
[--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL]
scriptname [scriptname ...]
实际命令:
pyinstaller -F -w "Tkinter 棋盘.py" --icon=tkinterLearn/Icons/drawing-box.ico
解析:
1、前面放参数,然是工程文件,还有程序在桌面看到的图标(如果是程序左上角图标我一般是弄成base64存入程序中)!
2、-F:表示打包为一个单独的exe(不写或者写-D就是打包为一个文件夹里面各种组件)
3、-w或者-c:选择程序运行是否会运行cmd,一般都是选-w隐藏cmd就好了,如果你要看cmd报错可以直接用cmd来开你的程序也是ok的。
报错了:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 30: invalid start byte
解决问题:
1、说要打开管理员模式:试了没效的…
2、最后试了要带上 --icon=这7个字符才可以呐,哈哈
最后打包后,出来就这样啦~
打包的第二个方法:
pyinstaller不是轮子吗?
那我们可以写个通用的打包代码呐!
那不就不用经常重复写了吗?哈哈
(这里再加上upx压缩~)(不过在pyqt5中夹压缩,程序就失效了…,我一般打包tkinter才加,还是python原生的支持好,哈哈)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = '将TargetOpinionMain python项目转换为exe文件'
__author__ = 'harry'
__email__ = '619342297@qq.com'
"""
# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller
from PyInstaller.__main__ import run
if __name__ == '__main__':
r = r"C:\Users\Administrator\PycharmProjects\bilibili_down01\tkinterLearn\drawing-box.ico"
opts = ['closenetAndrenet.py',
# r'--icon=' + r,
'-c', # -w/-c不显示/显示:cmd窗口,
'-F',
# r'--upx-dir=C:\Users\Administrator\Downloads\Compressed\upx-3.96-win64',
# '--upx-exclude=vcruntime140.dll',
]
run(opts)
看情况把注释打开就可以灵活实用了~哈哈,upx的压缩可以使程序再压缩个2-3Mb左右呢!
实测:Tkinter整个界面包加这个后打包,保持在6Mb左右,不加在8Mb左右!pyqt5的还是蛮大的,适合写大点的软件哈哈,30Mb起步了~
问题收集:
1、有时候打包成功,但是运行pyqt5程序打不开,报错:
cmd命令行是这样写的:
pyinstaller -F -w MarkTime_v1.0.py
这种情况:还是重新打一次包,设置“-w”为“-c”即运行程序时打让开cmd,这样才能看到报错。
pyinstaller -F -c MarkTime_v1.0.py
然后使用powershell运行一下程序:
报错:ModuleNotFoundError: No module named 'PyQt5
,居然说没有 PyQt5 库,那我们指定下轮子的所在路径 就好啦!更改下命令:
pyinstaller -F -w MarkTime_v1.0.py -p ../Lib/site-packages
ok,解决问题~