yyhhyy's blog

yyhhyy

Python项目防代码泄露指南

62
2024-06-20

最近有个案例,如何把一个python项目在一定程度上,能够在一定程度上防止代码泄露,因此有了本文。

1.安装compileall

pip install compileall

2.编写转换脚本并运行

import compileall
import os
import shutil

# 递归编译所有 .py 文件
compileall.compile_dir('.', force=True)

# 递归查找 __pycache__ 目录并处理 .pyc 文件
for root, dirs, files in os.walk('.'):
    for dir_name in dirs:
        if dir_name == '__pycache__':
            pycache_dir = os.path.join(root, dir_name)
            for pyc_file in os.listdir(pycache_dir):
                # 获取原始 .py 文件名和对应的 .pyc 文件名
                pyc_file_path = os.path.join(pycache_dir, pyc_file)
                # 这里假设环境使用的是 Python 3.10 因为转换后会有cpython-310标识
                pyc_base_name = pyc_file.replace('.cpython-310', '').replace('.pyc', '')
                original_py_file = pyc_base_name + '.py'
                original_py_file_path = os.path.join(root, original_py_file)
                # 移动 .pyc 文件到原始位置,并保留其命名格式
                new_pyc_file_path = os.path.join(root, pyc_base_name + '.pyc')
                shutil.move(pyc_file_path, new_pyc_file_path)
                # 删除原始 .py 文件
                if os.path.exists(original_py_file_path):
                    os.remove(original_py_file_path)
            # 删除空的 __pycache__ 目录
            os.rmdir(pycache_dir)

3.设置 PYTHONPATH

确保设置 PYTHONPATH 环境变量指向项目的根目录。例如:

3.1Windows:

set PYTHONPATH=D:\DB-GPT\DB-GPT-test

3.2Unix (Linux/macOS):

export PYTHONPATH=D:/DB-GPT/DB-GPT-test

4.运行程序

使用模块导入的方式来运行程序,而不是直接执行 .pyc 文件。例如:

python -m dbgpt.app.dbgpt_server