使用pyinstaller将含有多个py文件的工程打包成一个exe文件
- 1.首先创建一个spec文件,命名为main
使用Notepad++将main.spec文件打开,将第二步中的代码复制到文件中。 - 2.在文件中写下如下代码
# -*- mode: python -*-
block_cipher = None
a = Analysis(['main.py',
'utilsDigits.py',
'utilsLine.py', #此处写需要封装的多个.py文件,如果.py文件与.spec不在同一个文件下,则需在.py文件前添加路径
'config.py'],
pathex = ['C:\\Users\\admin\\Desktop\\chishui'],
binaries = [('D:\\Anaconda3\\envs\\tensorflow\\python.exe','bin')],#此处放置的是代码运行时,所调用的依赖,如OpenCV、tensorflow等
datas = [('C:\\Users\\admin\\Desktop\\chishui\\004.mp4','.')],#此处放置的是代码运行时所调用的数据文件
hiddenimports = [],
hookspath = [],
runtime_hooks = [],
excludes = [],
win_no_prefer_redirects = False,
win_private_assemblies = False,
cipher = block_cipher)
pyz = PYZ(a.pure, a.zipped_data,cipher = block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries = True,
name = 'main',
debug = False,
strip = False,
upx = True,
console = True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip = False,
upx = True,
name = 'main')
Analysis:元组中放置的是需要封装的多个python文件,python文件要放置在第一个列表中,若spec文件与需要封装的python文件不在同一个目录中,还需在数组的python文件前添加详细目录;
pathex:路径写环境变量,也就是你需要封装的工程的路径;
binaries:这个列表的路径放置的是你代码运行时。所调用的环境或者依赖,例如你配置的OpenCV、tensorflow等;如果不需要调用这些依赖,空列表也可以运行;
datas:这个列表中放置的是代码运行时调用的数据的路径,列表中第一个引号中放置数据路径,第二个引号写数据类型;如下:
数据书写格式如下:
datas =
[('C:\\Users\\admin\\Desktop\\chishui\\004.mp4','.')]
3.生成exe文件
首先,需在pycharm环境中安装pyinstaller插件,打开cmd,将路径调至.spec文件的目录下,输入以下代码
pyinstaller -D xxx.spec
xxx是由自己设置spec文件的名字;
运行结束后生成dist文件夹,在文件夹中找到xxx.exe文件运行,即可。
3.1封装单个py文件执行代码
pyinstaller -F xxx.py
4.生成exe文件后需注意的问题
运行exe文件后只出现命令提示框,没有运行结果,可能的原因调用的代码或文件不再同一个文件夹下,由于生成的exe文件和调用的依赖和数据在同一个文件夹下,但代码中可能有文件夹目录,但exe找不到文件夹,调用不到数据。
解决方法:在python代码中调用数据的地址目录删除,只留数据名称,同时,还需将数据与python代码放置在同一文件夹下。
5.总结
以上是我自己在打包多个python文件时,所遇到的一些问题,可能有些专业名词说得不太对,还望大家见谅!!!