【Python】脚本保护与分发:5 种方法轻松保护你的 Python 脚本

LuckiBit

以下是关于如何隐藏 clean.py 脚本内部代码的 5 种方法的改进与完善版,包括详细的步骤、工具下载、安装和使用说明。

方法 1:将 Python 脚本转换为可执行文件(EXE)

通过将 clean.py 转换为 .exe 文件,可以隐藏源代码。

步骤:

  1. 安装 PyInstaller:

    • 打开终端(如 cmdPowerShell),运行以下命令安装 PyInstaller:
      pip install pyinstaller
      
  2. 生成可执行文件:

    • clean.py 文件所在目录下,运行以下命令:
      pyinstaller --onefile --noconsole clean.py
      
      • --onefile:将所有文件打包成单个可执行文件。
      • --noconsole:不显示控制台窗口(适用于 GUI 程序)。
  3. 找到生成的文件:

    • 打包完成后,在 dist 文件夹中会生成 clean.exe。将其分发给其他用户,而无需提供原始代码。
  4. 优点:

    • 无需安装 Python 环境,用户只需运行生成的 clean.exe 即可。
  5. 注意:

    • 打包后的文件可能会比较大,取决于 Python 的运行时环境。

方法 2:将代码转换为字节码

将 Python 脚本编译为 .pyc 文件,分发 .pyc 而非 .py 文件。

步骤:

  1. 编译为字节码:

    • 在终端运行以下命令:
      python -m compileall clean.py
      
    • 运行后,会生成一个 __pycache__ 文件夹,里面包含类似 clean.cpython-XX.pyc 的文件(XX 是 Python 版本号)。
  2. 运行 .pyc 文件:

    • 用户可以运行 .pyc 文件,而无法直接查看源码。
      python __pycache__/clean.cpython-XX.pyc
      
  3. 优点:

    • 快速、简单。
    • 源代码被隐藏,虽然 .pyc 可以反编译,但仍然增加了代码保护的难度。
  4. 注意:

    • 需要用户安装与 .pyc 文件兼容的 Python 版本。

方法 3:将代码混淆(Obfuscation)

通过代码混淆工具将代码加密,使代码难以阅读。

工具推荐:

  1. pyarmor(强烈推荐):

    • 安装:
      pip install pyarmor
      
    • 加密代码:
      pyarmor pack -x " --onefile" -e " --noconsole" clean.py
      
      • 生成一个加密的独立可执行文件,类似方法 1 的效果。
    • 或者,仅对 clean.py 加密:
      pyarmor obfuscate clean.py
      
      • 生成一个混淆后的 .py 文件。
  2. 优点:

    • 高度混淆,几乎不可能还原源码。
    • 可直接运行混淆后的 .py.exe 文件。
  3. 注意:

    • 免费版可能存在功能限制。
    • 用户仍需安装 Python 环境运行混淆后的 .py 文件。

方法 4:使用 Cython 将代码编译为二进制文件

通过 Cython 编译,将 Python 脚本转换为二进制文件(.so.pyd)。

步骤:

  1. 安装 Cython:

    • 运行以下命令:
      pip install cython
      
  2. 创建编译文件:

    • 创建一个名为 setup.py 的文件,内容如下:
      from setuptools import setup
      from Cython.Build import cythonize
      
      setup(
          ext_modules=cythonize("clean.py", compiler_directives={"language_level": "3"}),
      )
      
  3. 编译为扩展模块:

    • 运行以下命令:
      python setup.py build_ext --inplace
      
    • 完成后,生成一个 .so(Linux/macOS)或 .pyd(Windows)文件。
  4. 运行二进制文件:

    • 替换掉 clean.py,仅分发 .so.pyd 文件,运行时效果与原代码相同:
      python -c "import clean"
      
  5. 优点:

    • 完全隐藏源码,仅提供编译后的二进制文件。
    • 性能略有提升。
  6. 注意:

    • 用户需要相同环境运行编译后的二进制文件。

方法 5:将脚本部署为云服务

clean.py 部署在服务器上,用户通过网络接口调用脚本的功能,而无需直接运行代码。

步骤:

  1. 使用 Flask 创建 API:

    • 安装 Flask:
      pip install flask
      
    • 创建 app.py
      from flask import Flask, request, jsonify
      import os
      
      app = Flask(__name__)
      
      @app.route('/clean', methods=['POST'])
      def clean():
          target_dir = request.json.get('target_dir', os.getcwd())
          # 运行清理逻辑
          return jsonify({"message": f"Cleaning completed for {target_dir}"})
      
      if __name__ == "__main__":
          app.run(host='0.0.0.0', port=5000)
      
  2. 运行 Flask 服务:

    • 启动服务:
      python app.py
      
  3. 客户端调用 API:

    • 用户可以通过以下命令调用脚本功能:
      curl -X POST http://<server-ip>:5000/clean -H "Content-Type: application/json" -d '{"target_dir":"/path/to/dir"}'
      
  4. 优点:

    • 源代码完全不暴露。
    • 用户仅通过网络接口访问脚本功能。
  5. 注意:

    • 需要配置服务器环境。

文件大小对比

方法文件类型文件大小范围说明
方法 1:EXE.exe5-50 MB包含运行环境,适合无 Python 环境用户。
方法 2:字节码.pyc原文件的 1.2 倍简单、文件体积小,但依赖 Python 环境。
方法 3:混淆.py / .exe1.5-50 MB混淆后 .py 较小,打包 .exe 较大。
方法 4:Cython 编译.pyd / .so50 KB-几 MB编译为二进制,较难反编译。
方法 5:云服务无需分发文件无直接影响客户端无文件下载,依赖网络交互。

总结

方法难度优点注意事项
方法 1:EXE简单用户无需 Python 环境,直接运行打包后的文件较大
方法 2:字节码简单快速、简单需要安装兼容的 Python 环境
方法 3:混淆中等代码高度保护部分工具免费版有功能限制
方法 4:Cython中等完全隐藏源码,性能提升运行环境需与编译环境一致
方法 5:云服务较复杂源代码完全不暴露,便于集中管理和更新需要服务器支持

推荐根据实际需求选择合适的方法。

结束语

  1. 本节内容已经全部介绍完毕,希望通过这篇文章,大家对 Python 脚本保护与分发有了更深入的理解和认识。
  2. 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持点我关注❤️

相关文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LuckiBit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值