关于如何高效使用pyinstaller这件事

用过pyinstaller的人都知道,pyinsdtaller的使用方法十分繁琐
每次使用都要调用命令提示符
并且键入pyinstaller -F <路径加文件名>
如果想要使用自己的ico文件,还要加上 -i <路径加图标文件名>

原先步骤:

  1. Win + R 并键入cmd 运行命令提示符
    1
  2. 依次输入d: cd D:\小帆。\Python转移盘符
    2
    需要强调的是,不转移盘符而直接输入pyinstaller -F <路径加文件名>也可以将应用程序打包,但是打包后文件存放的默认目录为盘符所在位,在我这里就是C:\Users\小帆,显然这不是我想要的位置。
    所以我转移盘符的目的是将文件存储在我想要的位置
    (pyinstaller内置的也有更改存储目录的命令,此处只是写出本人所用的一种方法,其他方法可自行查找)
  3. 输入pyinstaller -i <路径加图标文件名> -F <路径加文件名>
    3
    这里我输入的是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文件夹中。
    另外两个文件或文件夹可以安全的删除掉。
  4. 处理后事:
    把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自动写入上次数据):
在这里插入图片描述
以上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值