news 2026/4/15 11:14:34

Python 教程:一键生成自解压源码文件,自动还原并打包项目

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 教程:一键生成自解压源码文件,自动还原并打包项目

在日常开发中,我们有时会遇到这样的需求:

  • 想把一个项目源码打包成单个.py文件
  • 对方只需要运行这个.py,就能自动还原所有源码
  • 同时还能生成一个 zip 压缩包,方便分发或存档

本文将手把手教你实现一个Python 自解压源码方案,非常适合:

  • 内部源码交付
  • Demo 示例分发
  • 离线代码传输
  • 教学或工具型项目发布

✨ 最终效果

我们将得到两个东西:

  1. build_self_extract.py
    👉构建脚本,负责扫描并打包源码

  2. self_extract.py
    👉自解压脚本,运行后会:

    • 还原所有源码到目录
    • 自动生成source_code.zip

运行体验如下:

python self_extract.py

输出:

✅ 源代码已还原并压缩为 source_code.zip

🧠 实现思路

整体思路非常清晰:

  1. 遍历项目目录

  2. 按规则筛选需要的文件(.py/.json

  3. 排除虚拟环境、构建目录等

  4. 将源码内容序列化为 JSON

  5. 生成一个新的self_extract.py

  6. self_extract.py中:

    • 写回所有文件
    • 再打包成 zip

核心技巧:把“文件系统”变成 Python 变量。


📦 构建脚本:build_self_extract.py

这个脚本负责“打包一切”。

# build_self_extract.pyfrompathlibimportPathimportjson SOURCE_DIR=Path("./")OUTPUT_DIR=Path("build")OUTPUT_PY=OUTPUT_DIR/"self_extract.py"INCLUDE_EXT={".py",".json"}# 需要打包的源码类型EXCLUDE_DIRS={".git",".venv","venv","__pycache__",".history","build"}EXCLUDE_FILES={"self_extract.py","build_self_extract.py","111.py"}OUTPUT_DIR.mkdir(exist_ok=True)files_data={}forfileinSOURCE_DIR.rglob("*"):iffile.is_dir():continueiffile.suffixnotinINCLUDE_EXT:continueifany(partinEXCLUDE_DIRSforpartinfile.parts):continueiffile.nameinEXCLUDE_FILES:continuerel_path=file.relative_to(SOURCE_DIR)files_data[str(rel_path)]=file.read_text(encoding="utf-8",errors="ignore")# 生成自解压 pywithOUTPUT_PY.open("w",encoding="utf-8")asf:f.write(f'''""" 🚀 自解压源码文件 运行后将还原所有源代码并生成 source_code.zip """ from pathlib import Path import zipfile import json FILES = json.loads({json.dumps(json.dumps(files_data,ensure_ascii=False))}) BASE_DIR = Path("extracted_source") ZIP_NAME = "source_code.zip" def main(): BASE_DIR.mkdir(exist_ok=True) # 写回所有文件 for path, content in FILES.items(): file_path = BASE_DIR / path file_path.parent.mkdir(parents=True, exist_ok=True) file_path.write_text(content, encoding="utf-8", errors="replace") # 打包为 zip with zipfile.ZipFile(ZIP_NAME, "w", zipfile.ZIP_DEFLATED) as zf: for file in BASE_DIR.rglob("*"): if file.is_file(): zf.write(file, arcname=file.relative_to(BASE_DIR)) print("✅ 源代码已还原并压缩为", ZIP_NAME) if __name__ == "__main__": main() ''')print(f"✅ 已生成自解压文件:{OUTPUT_PY}")

▶️ 使用 Demo(完整流程)

1️⃣ 假设你的项目结构如下:

project/ ├── main.py ├── config.json ├── utils/ │ └── helper.py ├── build_self_extract.py

2️⃣ 执行构建脚本

python build_self_extract.py

生成结果:

build/ └── self_extract.py

3️⃣ 分发或运行self_extract.py

python self_extract.py

执行后生成:

extracted_source/ ├── main.py ├── config.json ├── utils/ │ └── helper.py source_code.zip

🎉源码完整还原 + 自动压缩完成!


⚙️ 可扩展方向(进阶玩法)

你可以在此基础上轻松扩展:

  • 🔐 给源码加密(base64 / AES)
  • 🧩 增加版本号、作者信息
  • 🖥 加 CLI 参数(如指定输出目录)
  • 📦 打包为.exe(配合 PyInstaller)
  • 🌐 通过 HTTP / API 动态释放

📝 总结

✅ 优点:

  • 单文件分发
  • 无需额外依赖
  • 代码可读、可控
  • 非常适合内部工具和 Demo

📌 适合人群:

  • Python 工具作者
  • 教学 / 培训
  • 内部源码交付
  • 自动化工程师

如果你觉得这个方案有用,欢迎点赞 + 收藏 + 关注👍

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 12:32:04

Docker Swarm 中 ingress 网络的核心用法

文章目录 实例 1:基础场景 - 部署带 ingress 发布端口的 Web 服务 操作步骤 & 命令: 关键解释: 实例 2:自定义 ingress 网络(修改默认子网/网关) 操作步骤 & 命令: 关键解释: 实例 3:ingress 网络 + 自定义 overlay 网络 操作步骤 & 命令: 关键解释: 实…

作者头像 李华
网站建设 2026/4/13 22:39:34

解密Fiddler,从零开始轻松掌握弱网测试技巧!

使用Fiddler对手机App应用进行抓包,可以对App接口进行测试,也可以了解App传输中流量使用及请求响应情况,从而测试数据传输过程中流量使用的是否合理。这篇文章就带大家了解一下抓包过程。 01 Fiddler设置 1、启动Fiddler->Tools->Fid…

作者头像 李华
网站建设 2026/4/14 4:34:27

python基于django固定资产折旧及租赁维修管理系统的设计与实现

目录固定资产管理系统摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!固定资产管理系统摘要 该系统基于Python的Django框架开发,旨在为企业提供高效的固定资产折旧计…

作者头像 李华
网站建设 2026/4/12 7:07:20

python基于django语言在线考试与自动评判系统

目录基于Django的在线考试与自动评判系统摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!基于Django的在线考试与自动评判系统摘要 在线考试与自动评判系统是一种利用现代网络技…

作者头像 李华
网站建设 2026/4/8 4:35:03

掌握这两点,你的 SQL 查询速度直接提升 10 倍

掌握这两点,你的 SQL 查询速度直接提升 10 倍据统计,85%的企业级应用性能问题源于低效的SQL查询。某电商公司2025年双11期间因未优化索引导致订单查询延迟超2秒,直接造成单日GMV损失超300万元。本文将通过B树索引原理、执行计划深度解析、动态…

作者头像 李华