实现自动打包py及替换pyinstaller --add-data参数的方法

2024年了,PyInstaller已经来到了6.5.0版本,可我还是不会用它那个--add-data的方法,度了几圈试了试,始终不(行)如(不)意(通),就是没能把附加文件(或资源文件)弄到dist目录中去,百思不得解,只能另寻它法,佛说:法海无边!

一、使用环境

1.Win 10 64位操作系统

2.python3.12.2 32位

3.IDE:PyCharm 2024.1 社区版

4.pyinstaller 6.5.0

二、我的项目结构如下

当然手动复制可以解决你的烦恼,可是,我不想啊!能自动为啥不用自动呢!

看了上图,有人会说为啥不加上--add-data呢,抱一丝,哥玩不转它。

哥尝试:

pyinstaller -F -w -i iss_32.ico --add-data ".\cfg.ini;.\dist" --add-data ".\audio\*;.\dist\audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data "./cfg.ini;./dist" --add-data "./audio/*;./dist/audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data ".\\cfg.ini;.\\dist" --add-data ".\\audio\\*;.\\dist\\audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data ".//cfg.ini;.//dist" --add-data ".//audio//*;.//dist//audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data "\cfg.ini;\dist" --add-data "\audio\*;\dist\audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data "/cfg.ini;/dist" --add-data "/audio/*;/dist/audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data "\\cfg.ini;\\dist" --add-data "\\audio\\*;\\dist\\audio" LedController.py
或
pyinstaller -F -w -i iss_32.ico --add-data "//cfg.ini;//dist" --add-data "//audio//*;//dist//audio" LedController.py

没毛用!

再尝试改spec文件中的datas参数,再pyinstaller LedController.spec

pyinstaller LedController.spec
datas=[('./cfg.ini', './dist'), ('./audio/*', './dist/audio')]
或
datas=[('.\cfg.ini', '.\dist'), ('.\audio\*', '.\dist\audio')]
或
datas=[('/cfg.ini', '/dist'), ('/audio/*', '/dist/audio')]
或
datas=[('\cfg.ini', '\dist'), ('\audio\*', '\dist\audio')]
或
datas=[('.\\cfg.ini', '.\\dist'), ('.\\audio\\*', '.\\dist\\audio')]
或
datas=[('.//cfg.ini', './/dist'), ('.//audio//*', './/dist//audio')]
或
datas=[('\\cfg.ini', '\\dist'), ('\\audio\\*', '\\dist\\audio')]
或
datas=[('//cfg.ini', '//dist'), ('//audio//*', '//dist//audio')]

还是没毛用!

于是看了看 https://pyinstaller.org/_/downloads/en/v6.5.0/pdf/

赶紧试了下

pyinstaller --noconfirm --log-level=WARN --onefile --nowindow --add-data="cfg.ini;config" LedController.py

嗯!.............................................这..................绝对不可能!好吧,我还是放弃吧。这不是我能触摸的,我的境界还不够!

此时音乐响起,好难过,这不是我要的那种结果,太多太多,让我迷惑,最后我还是迷失了自我,求求你不要再来折磨我...

三、开始自摸之路

1.创建一个build.py用于实现自动打包成exe和添加附加文件,再也不用频繁在命令行敲代码了

# -*- coding: utf-8 -*-
import os
import time
import shutil
import PyInstaller.__main__

# 清除缓存文件
# 判断是否有build、dist文件夹以及.spec文件,有就删除
if os.path.isdir(r'.\build'):
    shutil.rmtree(r'.\build')
if os.path.isdir(r'.\dist'):
    shutil.rmtree(r'.\dist')
if os.path.isfile(r'.\LedController.spec'):
    os.remove(r'.\LedController.spec')
time.sleep(2)

# 开始生成exe文件,等同于:pyinstaller -F -w -i iss_32.ico LedController.py
PyInstaller.__main__.run([
    '-F',
    '-w',
    '--icon=iss_32.ico',  # 这里不能使用-i iss_32.ico,说是无此文件,奇怪
    'LedController.py'
])
time.sleep(2)

# 复制附加文件(如资源文件等)到生成的exe文件同一目录中
# PS:百度了很多的pyinstaller参数--add-data的用法反正是死活没成功
# 还不如另寻它法,条条大路通罗马,何必单恋这只花
# 把当前目录下的cfg.ini文件到当前dist目录中
shutil.copy2(r'.\cfg.ini', r'.\dist')
# 把当前目录下的audio文件夹(包括里面所有的文件)复制到当前dist目录中
shutil.copytree(r'.\audio', r'.\dist\audio')
print("=========生成完成!=========")

2.点击运行当前脚本

3.奈斯!完美!把附加文件自动复制到dist目录下了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值