一.将单个文件打包
1.安装Pyinstaller模块
2.在Pycharm中的Terminal输入命令:“pyinstaller -F -w XXX.py” 就可以制作出exe。
在cmd中:先cd到项目目录下再输入命令。例如:pyinstaller -F -w -i g:\2345Downloads\logo.ico login.py
Notice:(g:\2345Downloads\logo.ico)为图标路径。
/**
*附参数集合:
–icon=[图标路径](http://www.icontuku.com/)(pyinstaller -F --icon=my.ico XXXX.py)
-F 打包成一个exe文件
-w 小写,使用窗口,无控制台
-c 使用控制台,无窗口
-D 创建一个目录,里面包含exe以及其他一些依赖性文件
-i 这里的i也是小写的,意思是忽略打包过程中遇到的错误,就是遇到错误也继续执行
*
*/
生成的文件放在同目录dist下。不加-F参数生成一堆文件,但运行快。压缩后比单个exe文件还小一点点。 加-F参数生成一个exe文件,运行起来慢。
二.将多个文件和素材打包
命令:(cmd下打包多个文件,第一个为主文件)
1 >pyinstaller -F -w -i g:\2345Downloads\logo.ico login.py
–hidden-import doTest.py --hidden-import itemContent --hidden-import queryDB.py
–hidden-import view.py --hidden-import Applications.py --hidden-import mainWindow.py
**解释:进入到cmd命令行中,然后cd到我们的项目代码所在的具体的目录,在项目代码所在的目录中,使用上述代码进行打包。
这里没有在项目里放置更多的文件夹,一些代码文件都是散放在主文件夹中,在 pyinstaller -F -w -i之后放的是我们需要最终显示的图标的绝对路径,之后的第一个Python文件就是这个项目的主文件,之后使用–hidden-import导入这个项目中的一些其他的Python文件。
如果我们是把一些具体功能的Python文件放在了一个具体的文件夹里,那么我们就可以使用-p 文件夹名,例如:
我们假设我们创建了一个sql文件夹,用来放一些处理数据库的Python文件,这里假设有mysql.py**
项目包含素材
1.此方法只能在本机中运行
如果项目中含有图片,我们需要将代码中对图片的引用变成绝对路径,而不是相对路径,如果不适用绝对路径,在执行打包的过程不会报错,也能正常生成EXE文件,但是当我们在执行它时,会提示一个错误:fail to execute script login(这里是你的程序入口的文件的文件名),如果想要看到点击EXE文件之后报的错误,我们可以将目录中的login.spec文件中的console=True,默认是False,所以如果设置为True之后,就会将错误信息显示在命令行窗口中。如果不想让程序打开时同时显示控制台黑色框可以,将图中console=True改为console=False
# -*- mode: python -*-
block_cipher = None
a = Analysis(['login.py'],
pathex=['F:\\python_project_reveiw'],
binaries=[],
datas=[],
hiddenimports=['doTest.py', 'itemContent', 'queryDB.py', 'view.py', 'Applications.py', 'mainWindow.py'],
hookspath=[],
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='login',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=False , icon='g:\\2345Downloads\\logo.ico')
当我们设置完那些参数之后,我们就可以直接对login.spec文件进行打包了,命令如下:pyinstaller -F -w -i g:\2345Downloads\logo.ico login.spec
最后生成的EXE文件会替换掉之前生成的EXE文件。
Notice:32位的操作系统不能运行64位python打包的exe文件。
2.在任何电脑中都能运行(图片)
1.Pic2py.py : 图片转为.py
import base64
def pic2py(picture_names, py_name):
"""
将图像文件转换为py文件
:param picture_name:
:return:
"""
write_data = []
for picture_name in picture_names:
filename = picture_name.replace('.', '_')
open_pic = open("%s" % picture_name, 'rb')
b64str = base64.b64encode(open_pic.read())
open_pic.close()
# 注意这边b64str一定要加上.decode()
write_data.append('%s = "%s"\n' % (filename, b64str.decode()))
f = open('%s.py' % py_name, 'w+')
for data in write_data:
f.write(data)
f.close()
if __name__ == '__main__':
pics = ["icon.ico", "weixin.gif", "alipay.gif"]
pic2py(pics, 'memory_pic') # 将pics里面的图片写到 memory_pic.py 中
print("ok")
2 在程序中引用
from memory_pic import *
def get_pic(pic_code, pic_name):
image = open(pic_name, 'wb')
image.write(b64decode(pic_code))
image.close()
get_pic(icon_ico, 'icon_ico')
# 在这里使用图片 icon.ico
os.remove('icon.ico')
打包的exe文件太大?
原因
由于使用pyinstaller打包.py文件时,会把很多已安装的无关库同时打包进去,导致打包生成的.exe文件体积过大。
解决办法
使用pipenv创建虚拟python环境,在虚拟环境中安装.py文件所用到的库(即py文件中import 的第三方库),然后在pipenv所创建的虚拟环境中使用pip安装打包所用到的pyinstaller。注意:本机安装过pyinstaller的也要重新进入虚拟环境中安装,不然会使用pyinstaller命令打包时,还是会生成大体积的.exe可执行文件。
具体步骤如下:
1、在命令行使用pip命令安装pipenv库,用于创建虚拟环境
pip install pipenv
1
2、新建一个准备当环境的文件夹,并cd进入该文件夹
3、建立虚拟环境
pipenv install
1
4、进入虚拟环境(以下操作皆为虚拟环境下的操作)
pipenv shell
1
5、安装.py文件用到的模块
pip install 【.py用到的模块】
1
6、安装pyinstaller模块,用于打包.py文件
pip install pyinstaller
1
7、使用pyinstaller打包文件
pyinstaller -Fw E:\pipenvtest\test.py(.py文件根据实际情况更改)
8、结果文件
运行完第7步之后,在目录下回生成‘dist’文件夹,里面存放的就是结果文件。
参考文献
关注公众号【轻松玩编程】回复关键字激活码即可获取:全家桶通用激活码(激活码支持idea,pycharm,webstorm,phpstorm…激活)定期更新。适用于最新及以下版本。(无需破解和修改hosts,如果破解过请卸载重新安装官方原版,如果修改过hosts,请删除你添加的网址,然后重新激活)
回复关键字“电子书”,“计算机资源”,“Java从入门到进阶”,”JavaScript教程“,“算法”,“Python学习资源”,“人工智能”等即可获取学习资源。