Python工程项目编译成pyc部署

本文介绍了一种Python项目的部署方式,通过将项目中所有的.py文件编译为.pyc文件来加速程序启动并保护源代码。文章提供了实现这一过程的具体Python脚本,并详细解释了其工作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

功能

pyc部署优点

使用


功能

将Python工程目录下的所有py文件(递归所有子目录)编译成pyc文件,可选择生成新的工程目录,也可以选择删除源文件,仅保留pyc文件用于部署

pyc部署优点

  • 省去了Python动态编译的过程,直接加载pyc字节码文件,可以加速Python运行速度
  • pyc文件是二进制文件,可以保护源代码不被看见,当然也有大牛能反编译,这个还么有研究过

使用

将该函数py文件放在和待编译的工程目录同一级,运行就可以了

import datetime
from pathlib import Path
import os
import shutil
import compileall

def package(root_path="./test_project/",reserve_one=False):
    """
    编译根目录下的包括子目录里的所有py文件成pyc文件到新的文件夹下
    如果只保留一份文件,请将需编译的目录备份,因为本程序会清空该源文件夹
    :param root_path: 需编译的目录
    :param reserve_one: 是否只保留一个目录
    :return:
    """
    root = Path(root_path)

    # 先删除根目录下的pyc文件和__pycache__文件夹
    for src_file in root.rglob("*.pyc"):
        os.remove(src_file)
    for src_file in root.rglob("__pycache__"):
        os.rmdir(src_file)

    current_day = datetime.date.today()  # 当前日期
    edition = "1.0"  # 设置版本号

    dest = Path(root.parent / f"{root.name}_{edition}.{'001'}_beta_{current_day}")  # 目标文件夹名称

    if os.path.exists(dest):
        shutil.rmtree(dest)

    shutil.copytree(root, dest)

    compileall.compile_dir(root, force=True)  # 将项目下的py都编译成pyc文件

    for src_file in root.glob("**/*.pyc"):  # 遍历所有pyc文件
        relative_path = src_file.relative_to(root)  # pyc文件对应模块文件夹名称
        dest_folder = dest / str(relative_path.parent.parent)  # 在目标文件夹下创建同名模块文件夹
        os.makedirs(dest_folder, exist_ok=True)
        dest_file = dest_folder / (src_file.stem.rsplit(".", 1)[0] + src_file.suffix)  # 创建同名文件
        print(f"install {relative_path}")
        shutil.copyfile(src_file, dest_file)  # 将pyc文件复制到同名文件

    # 清除源py文件
    for src_file in dest.rglob("*.py"):
        os.remove(src_file)

    # 清除源目录文件
    if reserve_one:
        if os.path.exists(root):
            shutil.rmtree(root)
        dest.rename(root)


if __name__ == '__main__':
    package(root_path="./test_project/",reserve_one=False)

    # 会清空源文件夹,记得备份,适合上线部署,删除源代码,防止泄露
    # package(root_path="./test_project/",reserve_one=True)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值