news 2026/6/10 15:52:09

python --打包exe/预编译pyc

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python --打包exe/预编译pyc

预编译pyc

# py3.10.3importcompileallimportreimporttimefrompathlibimportPathimportshutilfromloguruimportloggerclassPack(object):'''打包'''def__init__(self,input:str,is_dir=True):self.input:Path=Path(input)# 待编译的输入目录/单个文件self.output:Path=self.get_desk_top()# 输出到桌面路径self.is_dir:bool=is_dir# 是否为目录或单个文件 True为目录 False为单个文件self.exclude_pattern=re.compile(r"(\.venv/|\.git/)")# 排除的目录正则defget_desk_top(self):'''获取桌面路径'''returnPath.home().joinpath("Desktop")defpack_file(self):'''编译单个文件'''compileall.compile_file(fullname=str(self.input),# 必选:单个文件的完整路径force=True,# 强制重新编译optimize=2,# 最高优化级别quiet=0,legacy=True)logger.debug(f'编译【{self.input}】成功!')_file_path,_file_name=self.input.parent,self.input.stem# 提取输入的文件路径和文件名(不含后缀)pyc_filename=f'{_file_name}.pyc'# 生成后的pyc文件名称pyc_abs_path=Path(_file_path).joinpath(pyc_filename)# 生成的pyc绝对路径new_pyc_abs_path=self.output.joinpath(pyc_filename)# 要移动的目标绝对路径shutil.move(pyc_abs_path,new_pyc_abs_path)# 移动logger.success(f'移动文件【{pyc_abs_path}】-->【{new_pyc_abs_path}】')defpack_dir(self):'''编译整个项目'''compileall.compile_dir(dir=self.input,# 原项目目录optimize=2,# 最高优化,提升反编译难度maxlevels=10,# 递归深度无限制(0=不限制)quiet=1,# 0 表示完整输出,1 表示仅输出错误,legacy=True,# 如果为 True,则生成传统 pyc 路径,而不是 PEP 3147 路径workers=1,# 最大并行工作线程数force=True)dir_name=self.input.name# 项目名new_dir=self.output.joinpath(dir_name)# 复制到桌面的项目名ifnew_dir.exists():# 如果存在则删除shutil.rmtree(new_dir)new_dir.mkdir(parents=True,exist_ok=True)# 递归创建目录foriinself.input.rglob('*'):parts:tuple=i.partsifany(('.git'inparts,'venv'inparts,'.venv'inparts,'.idea'inparts)):# 排除文件continueifi.is_dir()ori.suffix=='.py':continuerel_path=i.relative_to(self.input)# 得到当前文件和输入目录的相对路径target_path=new_dir.joinpath(rel_path)# 得到目标输出绝对路径target_path.parent.mkdir(parents=True,exist_ok=True)# 创建目标输出的路径ifi.suffix=='.pyc':# 如果是pyc文件移动logger.success(f'移动:【{i}】-->【{target_path}】')shutil.move(i,target_path)else:# 负责为复制logger.success(f'复制:【{i}】-->【{target_path}】')shutil.copy2(i,target_path)defstart(self):'''开始'''ifself.is_dir:logger.warning(f'编译(目录)文件:【{self.input}】')time.sleep(0.5)self.pack_dir()else:logger.warning(f'编译(单独)文件:【{self.input}】')time.sleep(0.5)self.pack_file()a=Pack(r"D:\jiexun\htsy",is_dir=True)a.start()

打包exe

# coding=utf-8 py3.7.3# @Time : 2025-09-01 02:04# @Author : XiaoYi# @Email: 1206154726@qq.comimportosimportshutilfromloguruimportlogger desktop_dist=os.path.join(os.path.join(os.path.expanduser("~"),'Desktop'),'dist')desktop_main=os.path.join(desktop_dist,'main')# from urllib.parse import quote as url_quotelogger.debug(f'----------------------------开始构建程序--------------------------')os.system('pyinstaller main.py -i logo.ico')# 执行打包指令 pyinstaller -w main.py -i logo.ico 无调试窗口logger.success(f'------->基础镜像结束,开始打包静态资源')shutil.move(os.path.join(os.getcwd(),'dist'),desktop_dist)# 移动文件到桌面logger.debug(f'------->【dist】基础镜像结束')shutil.rmtree(os.path.join(os.getcwd(),'build'))# 删除打包构建文件os.remove(os.path.join(os.getcwd(),'main.spec'))# 删除打包构建文件logger.warning(f'------->【编译文件清除】清除结束')shutil.copyfile(os.path.join(os.getcwd(),'config.yaml'),os.path.join(desktop_main,'config.yaml'))shutil.copyfile(os.path.join(os.getcwd(),'chromedriver.exe'),os.path.join(desktop_main,'chromedriver.exe'))os.rename(os.path.join(desktop_main,'main.exe'),os.path.join(desktop_main,'新球体育.exe'))# 重命名打包后的文件os.rename(desktop_main,os.path.join(desktop_dist,'xinqiutiyu'))# 重命名打包后的文件logger.success(f'-------【打包结束】----------')
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 9:07:12

【计算机毕业设计案例】基于SpringBoot的野生动物园财务与票务一体化平台基于springboot的西安秦岭野生动物园智能化管理系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/10 9:02:48

信号处理仿真:傅里叶变换与频谱分析_(6).非周期信号的频谱分析

非周期信号的频谱分析 1. 引言 在信号处理领域,非周期信号的频谱分析是一个重要的课题。非周期信号在自然界和工程应用中广泛存在,例如语音信号、雷达回波信号、生物医学信号等。傅里叶变换(Fourier Transform)是频谱分析的核心工…

作者头像 李华
网站建设 2026/6/10 9:03:44

计算机Java毕设实战-基于springboot的饰品商城系统基于Java Web的饰品商城系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/10 10:41:53

autodl 上PaddleOCR-VL 部署(2026年1月22日亲测可用)

会话管理命令(推荐使用 screen 或 tmux 后台运行) 功能 screen 命令 tmux 命令 新建命名会话 screen -S 名字 tmux new -s 名字 列出所有会话 screen -ls tmux ls 重新连接会话 screen -r 名字 tmux attach -t 名字 detach(后台运行&#xff…

作者头像 李华
网站建设 2026/6/10 10:41:29

系统规划与管理师必看:2026年监控工具选型与实施指南

一、监控工具定义与核心内容 监控工具是用于实时采集、分析、展示和预警信息系统运行状态的技术手段,其核心目标是确保系统稳定性、性能达标及资源高效利用。在当今数字化快速发展的时代,信息系统已成为企业运营的核心支撑,一旦出现故障或性…

作者头像 李华