news 2026/2/4 3:07:42

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/1/30 9:25:10

【Java毕设全套源码+文档】基于springboot的高校实验室教学管理系统设计与实现(丰富项目+远程调试+讲解+定制)

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

作者头像 李华
网站建设 2026/1/30 15:29:33

【CUDA手册004】一个典型算子的 CUDA 化完整流程

【CUDA手册004】一个典型算子的 CUDA 化完整流程 在本篇中,我们将以医学图像处理中最基础的“二值化阈值算子(Thresholding)”为例,演示如何将一个 C 算子完整地迁移到 CUDA。 1. 第一步:建立 CPU Baseline&#xff08…

作者头像 李华
网站建设 2026/2/2 1:12:46

从写作到降重:7大AI模型一站式解决方案

AI写论文工具排名:7大模型查重率低技巧推荐 7大AI论文工具核心对比 工具名称 核心功能 查重优化 适用场景 效率评分 AiBiye 论文全流程辅助 智能降重 从选题到定稿 ★★★★★ AiCheck 查重与降重 深度降重算法 论文修改阶段 ★★★★☆ AskPaper 文…

作者头像 李华
网站建设 2026/1/30 5:22:20

拒绝抄袭风险:7大智能改写工具实战指南

AI写论文工具排名:7大模型查重率低技巧推荐 7大AI论文工具核心对比 工具名称 核心功能 查重优化 适用场景 效率评分 AiBiye 论文全流程辅助 智能降重 从选题到定稿 ★★★★★ AiCheck 查重与降重 深度降重算法 论文修改阶段 ★★★★☆ AskPaper 文…

作者头像 李华
网站建设 2026/1/30 3:51:49

7大AI论文助手盘点:改写降重功能实测对比

7大AI论文工具核心对比 工具名称 核心功能 查重优化 适用场景 效率评分 AiBiye 论文全流程辅助 智能降重 从选题到定稿 ★★★★★ AiCheck 查重与降重 深度降重算法 论文修改阶段 ★★★★☆ AskPaper 文献阅读助手 引用规范 文献综述阶段 ★★★★☆ 秒篇…

作者头像 李华