加密python项目并打包

1. 安装 PyArmor

使用 pip 安装 PyArmor:

pip install pyarmor


2. 加密单个脚本文件

假设你有一个Python脚本 app.py,你可以使用以下命令进行加密:

pyarmor gen --output dist read_config.p

运行后,PyArmor会生成一个dist目录,里面包含加密后的文件:

dist/ pytransform/ app.py app.pyc

  • app.py:加密后的脚本。
  • app.pyc:编译后的加密字节码文件。
  • pytransform/:PyArmor运行时库,必须和加密代码一起分发。

3. 加密整个项目

如果你的项目有多个Python文件,例如:

my_project/ main.py utils.py module/ __init__.py helper.py

你可以直接加密整个项目:

pyarmor obfuscate -r my_project/

  • -r 表示递归地加密所有子目录中的Python文件。
  • PyArmor会在项目的每个目录中生成对应的加密文件。

4. 设置有效期(运行时间限制)

你可以为加密的代码设置一个有效期,例如在2024年12月31日前有效:

pyarmor obfuscate --expire "2024-12-31" app.py


5. 绑定硬件(限制运行机器)

可以将代码绑定到特定的机器,只有提供正确的授权密钥时代码才能运行:

  1. 生成授权密钥:

    pyarmor gen --bind-disk app.py

  2. 加密代码,并绑定到生成的授权密钥:

    pyarmor obfuscate --bind-disk app.py


6. 生成可执行文件

PyArmor 可以结合 PyInstaller 将加密代码打包成可执行文件。

步骤

  1. 先用 PyArmor 加密你的代码:

    pyarmor obfuscate app.py

  2. 再用 PyInstaller 打包加密后的代码:

    pyinstaller --onefile dist/app.py

最终会生成一个加密后的可执行文件,既保护了源码,又能直接运行。


注意事项

  1. PyArmor 提供了基本的代码混淆和加密,但无法完全防止高级反编译和反向工程手段。
  2. pytransform 运行时库是必须的,分发时要与加密后的代码一起提供。
  3. PyArmor 是商业软件,免费版本有功能限制(例如最大文件数、授权时间等)。

常用命令

  • 单个文件加密:pyarmor obfuscate app.py
  • 递归加密项目:pyarmor obfuscate -r my_project/
  • 设置有效期:pyarmor obfuscate --expire "2024-12-31" app.py
  • 绑定硬件:pyarmor obfuscate --bind-disk app.py

步骤1:确保项目能正常运行

先测试加密后的 Flask 项目是否能正常运行。进入 dist/src 目录,运行加密后的 app.py

cd dist/src python app.py

步骤2:使用 PyInstaller 打包

dist 目录下运行以下命令:

pyinstaller --onefile --add-data "src/templates;templates" --add-data "src/static;static" src/app.py

参数说明:
  • --onefile:将所有依赖和代码打包成一个独立的可执行文件。
  • --add-data
    • src/templates;templates:将 src/templates 目录添加到打包的可执行文件中,解压到 templates 目录。
    • src/static;static:将 src/static 目录添加到打包的可执行文件中,解压到 static 目录。

4. 处理 Flask 代码中的资源路径

在打包后的可执行文件中,资源文件的路径需要特殊处理,因为 PyInstaller 会将资源解压到临时目录中(sys._MEIPASS)。你需要修改 Flask 代码,让它能够正确访问模板和静态文件。

修改 app.py

app.py 中,添加对 sys._MEIPASS 的处理:

import os import sys from flask import Flask, render_template # 处理模板和静态文件路径 base_path = getattr(sys, '_MEIPASS', os.path.abspath(".")) app = Flask(__name__, template_folder=os.path.join(base_path, "templates"), static_folder=os.path.join(base_path, "static")) @app.route("/") def index(): return render_template("index.html") if __name__ == "__main__": app.run(host="0.0.0.0", port=5000)

  • sys._MEIPASS 是 PyInstaller 在运行时提取临时目录的路径。
  • 通过 os.path.join(base_path, "templates")os.path.join(base_path, "static") 确保 Flask 正确加载模板和静态资源。

5. 运行打包后的应用

打包完成后,进入 dist 目录,找到生成的可执行文件(app.exe),运行:

.\app.exe

Flask 应用将启动,并且能正确加载 templatesstatic 目录中的资源。


6. 部署文件

最终,你需要部署以下内容到服务器:

  1. 仅加密代码版本

    • dist/src/(包含加密后的 Python 文件)
    • static/templates/ 目录
    • pytransform/ 运行时库
  2. 打包为单个 exe 的版本(可选):

    • 只需部署 app.exe,无需其他文件。
       

pyarmor,一个超级厉害的 Python 库!-CSDN博客

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值