用过pyinstaller的人都知道,pyinsdtaller的使用方法十分繁琐
每次使用都要调用命令提示符
并且键入pyinstaller -F <路径加文件名>
如果想要使用自己的ico文件,还要加上 -i <路径加图标文件名>
原先步骤:
- Win + R 并键入cmd 运行命令提示符
- 依次输入
d:
cd D:\小帆。\Python
转移盘符
需要强调的是,不转移盘符而直接输入pyinstaller -F <路径加文件名>
也可以将应用程序打包,但是打包后文件存放的默认目录为盘符所在位,在我这里就是C:\Users\小帆
,显然这不是我想要的位置。
所以我转移盘符的目的是将文件存储在我想要的位置
(pyinstaller内置的也有更改存储目录的命令,此处只是写出本人所用的一种方法,其他方法可自行查找) - 输入pyinstaller -i <路径加图标文件名> -F <路径加文件名>
这里我输入的是pyinstaller -i D:\小帆。\Python\xiaofan.ico -F D:\小帆。\Python\21_1_7/SevenDigitsDrawV1.py
,其中D:\小帆。\Python\xiaofan.ico
是我的图标地址,Python\21_1_7/SevenDigitsDrawV1.py
是等待打包的.py文件地址
按下回车键后,pyinstaller开始运行,最后出现successfully。然后就可以在自己当初转换盘符后的位置处找到3个相关文件:
而应用程序就在图中的dist文件夹中。
另外两个文件或文件夹可以安全的删除掉。 - 处理后事:
把dist中的程序移动到我想要的地方保存起来(我这里就是名为【打包完成】的文件夹)然后将build、SevenDigitsDrawV1.spec和dist删除掉
这时,我得到了我想要的东西,并且保存到了我想要的位置。
我们可以发现原本的步骤十分繁琐,但又是重复性操作,所以我最先前的想法是写一个.bat批处理文件来解决这个问题。
步骤批处理:
第一步,新建一个文本文档,并修改内容为:
这样,我们就能通过双击bat文件完成原先操作里的1~3步
如果还想要将第四步放入其中,我们可以加入几行代码
代码解读:
- 首先清除三个文件中不是文件夹的文件(del行)
- 之后将dist文件夹中的文件移动到我想要的目录(move行)
- 最后删除两个不再被需要的文件夹(rd行)
至此,我们编辑好了文本文件,接下来只要把.txt后缀改为.bat后缀即可。仍需注意的是:如果文件路径中含有中文,那需要加上一步——将文本文件另存为ANSI格式,因为默认的utf8格式不能识别中文并会导致乱码
接下来如果我们想要再次打包另一个.py文件,只需右键.bat文件选择编辑,将文件路径更改后保存即可。
但这并没有结束,因为对于我来说,编辑的操作还是十分繁琐,我想更进一步
使用Python协助处理
从上图可以看出,我每次写好的代码都会保存在以相应日期命名的文件里,这是有规律可寻的,我可以通过Python编写代码,使用input函数来填写我需要的日期,以及我想打包的文件名,再将这些数据写入到.bat批处理文件中,也就是说,我用Python自动创建一个.bat文件,这个文件的内容会根据我输入的日期(对应于我的文件路径,因为我按日期存放代码),和我输入文件名有关(对应于要打包文件的文件名)。这样我就不需要在每次打包前手动编辑路径和文件名。
下面上代码:
import os
f0=open("D:\\小帆。\\Python\\储存上次操作.txt")
y=f0.readline()[0:-1]
m=f0.readline()[0:-1]
d=f0.readline()[0:-1]
n=f0.readline()
f0.close()
y1=input("请输入年(默认为{}):".format(y))
m1=input("请输入月(默认为{}):".format(m))
d1=input("请输入日(默认为{}):".format(d))
n1=input("请输入.py文件名(默认为{}):".format(n))
f1=open("D:\\小帆。\\Python\\转exe.bat","w",encoding="ANSI")
Y=y if y1=="" else y1
M=m if m1=="" else m1
D=d if d1=="" else d1
N=n if n1=="" else n1
f1.write("d:\ncd D:\\小帆。\\Python\\打包完成\n"+"\
pyinstaller -i D:\\小帆。\\Python\\xiaofan.ico \
-F D:\\小帆。\\Python\\{}_{}_{}\\{}\n\
del /q D:\\小帆。\\Python\\打包完成\\{}.spec\n\
move .\\dist\\* D:\\小帆。\\Python\\打包完成\n\
rd /s/q dist build".format(Y,M,D,N,N[0:-3]))
f1.close()
f2=open("D:\\小帆。\\Python\\储存上次操作.txt","w")
f2.write("{}\n{}\n{}\n{}".format(Y,M,D,N))
f2.close()
os.system("D:\\小帆。\\Python\\转exe.bat")
这些代码是我优化后的代码,乍一看可能不太能看懂。
我来稍微解释一下:
因为我刚刚看了有关文件和数据处理的慕课,所以我想到可以用读写.txt文件的方法记录我上次输入的数据,这样在输入的时候我不必每次都输入21年
1月
等等,因为这些参数1个月甚至1年才会改变一次,所以我在每次输入后将其存储,当做下一次的默认值(对应f2=open之后的语句),而每次输入前,Python都会读取上一次输入的值(对应f0.close之前的语句),如果不需要更改,回车即可(对应if else 语句),而引用os库的作用是写入后直接执行.bat文件(对应最后一句),f1.write语句就是写入.bat文件的语句。
默认情况:全部回车
更改情况:更改的地方重新输入,不更改的地方回车
下一次输入时,默认的数据就会更新到上一次输入的状态
之前:
之后(Python自动写入上次数据):
以上