使用pyinstaller将含有多个py文件的工程打包成一个exe文件

使用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文件时,所遇到的一些问题,可能有些专业名词说得不太对,还望大家见谅!!!

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值