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 10:34:31

【计算机毕业设计案例】基于springboot的社区协作与资源共享系统基于springboot+vue的社区资源共享系统设计与实现(程序+文档+讲解+定制)

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

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

19.Spring 框架中的 IOC

Spring 框架中的 IOC?Spring 中的 org.springframework.beans 包和 org.springframework.context 包构成了 Spring 框架 IoC 容器的基础。BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。ApplicationContex 接口对 BeanFa…

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

Java毕设项目推荐-基于Java+SpringBoot的闲置用品交易平台基于springboot的闲一品闲置品交易平台【附源码+文档,调试定制服务】

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

作者头像 李华
网站建设 2026/6/10 10:33:24

算法围猎下的App渠道归因如何去伪存真?

为什么你的精准广告,总能避开所有真客户? 这是一个让无数营销人深感挫败的“数字化悖论”。近日,行业资深观察者“老泡”的一篇深度述评引发了移动营销圈的强烈共鸣。文章指出,当品牌方沉溺于由算法编织的完美投流报表——百分百匹…

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

SaaS、PaaS、IaaS?

什么,是 SaaS、PaaS、IaaS ?

作者头像 李华