Python实现一键生成自解压源码文件并打包项目

 更新时间:2026年01月18日 08:49:06   作者:weixin_46244623  
这篇文章主要为大家详细介绍了一个Python自解压源码方案,可将项目源码打包成单个.py文件,方便分发和存档,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

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

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

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

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

最终效果

我们将得到两个东西:

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

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

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

运行体验如下:

python self_extract.py

输出:

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

实现思路

整体思路非常清晰:

遍历项目目录

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

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

将源码内容序列化为 JSON

生成一个新的 self_extract.py

self_extract.py 中:

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

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

构建脚本:build_self_extract.py

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

# build_self_extract.py
from pathlib import Path
import json

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 = {}

for file in SOURCE_DIR.rglob("*"):
    if file.is_dir():
        continue

    if file.suffix not in INCLUDE_EXT:
        continue

    if any(part in EXCLUDE_DIRS for part in file.parts):
        continue

    if file.name in EXCLUDE_FILES:
        continue

    rel_path = file.relative_to(SOURCE_DIR)
    files_data[str(rel_path)] = file.read_text(
        encoding="utf-8", errors="ignore"
    )

# 生成自解压 py
with OUTPUT_PY.open("w", encoding="utf-8") as f:
    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 工具作者
  • 教学 / 培训
  • 内部源码交付
  • 自动化工程师

到此这篇关于Python实现一键生成自解压源码文件并打包项目的文章就介绍到这了,更多相关Python生成自解压源码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python MNIST手写体识别详解与试练

    Python MNIST手写体识别详解与试练

    MNIST(官方网站)是非常有名的手写体数字识别数据集,在Tensorflow的官方网站里,第一个就拿它来做实战讲解,咱们也以此作为开始的项目
    2021-11-11
  • 浅谈python在提示符下使用open打开文件失败的原因及解决方法

    浅谈python在提示符下使用open打开文件失败的原因及解决方法

    今天小编就为大家分享一篇浅谈python在提示符下使用open打开文件失败的原因及解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python实现矩阵乘法

    python实现矩阵乘法

    这篇文章主要介绍了python实现矩阵乘法,矩阵相乘需要前面矩阵的行数与后面矩阵的列数相同方可相乘,下面来看看python代码的具体实现吧
    2022-01-01
  • 跟老齐学Python之玩转字符串(3)

    跟老齐学Python之玩转字符串(3)

    字符串是一个很长的话题,纵然现在开始第三部分,但是也不能完全说尽。因为字符串是自然语言中最复杂的东西,也是承载功能最多的,计算机高级语言编程,要解决自然语言中的问题,让自然语言中完成的事情在计算机上完成,所以,也不得不有更多的话题。
    2014-09-09
  • 解决python使用open打开文件中文乱码的问题

    解决python使用open打开文件中文乱码的问题

    下面小编就为大家分享一篇解决python使用open打开文件中文乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 使用pandas的box_plot去除异常值

    使用pandas的box_plot去除异常值

    今天小编就为大家分享一篇使用pandas的box_plot去除异常值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Pandas index操作索引的实现

    Pandas index操作索引的实现

    Pandas中的索引index用于选择特定的行数和列数,加快数据访问速度,本文就来介绍一下index操作索引,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • python中的import绝对导入与相对导入详解

    python中的import绝对导入与相对导入详解

    这篇文章主要介绍了python中的import绝对导入与相对导入详解,在使用python做一些简单项目时,import一般不会出现问题,但项目结构复杂时,import可能发生报错,需要的朋友可以参考下
    2023-11-11
  • django 自定义过滤器的实现

    django 自定义过滤器的实现

    这篇文章主要介绍了django 自定义过滤器的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Python标准库argparse解析命令行参数使用详细介绍

    Python标准库argparse解析命令行参数使用详细介绍

    本文详细介绍了argparse模块在Python中的应用,包括action参数的使用方法、互斥参数的创建以及子命令的处理,通过示例代码展示了如何为命令行工具添加子命令并绑定处理函数,简化复杂逻辑,感兴趣的朋友跟随小编一起看看吧
    2026-06-06

最新评论