You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保护PyInstaller oneDir模式输出中的源码及资源文件不被用户访问?

如何保护PyInstaller oneDir模式输出中的源码及资源文件不被用户访问?

嘿,针对你遇到的PyInstaller oneDir模式下文件暴露的问题,我整理了几个实用的方案,能帮你提高代码和资源的安全性(注意:没有绝对的“防破解”,这些方法都是提升逆向门槛):

1. 修正文件打包方式,避免源码/核心文件作为外部数据

看你的spec文件里,把views/、components/这些目录作为datas复制到输出目录,这会导致里面的文件直接暴露。如果这些目录里是Python模块(.py文件),你应该让PyInstaller把它们打包进内部的PYZ归档,而不是作为外部文件:

  • 确保你的主程序main.py里已经导入了这些模块,或者在hiddenimports里补充缺少的模块(你已经加了一些,但可以检查是否覆盖全)。
  • 从datas列表里移除这些Python模块目录,只保留真正需要外部访问的资源(不过如果资源也想隐藏,看下面的方法)。

2. 用Qt资源文件封装UI/图片等资源

对于Qt的.ui文件、图片、字体这类资源,不要直接作为datas复制,而是用Qt的资源系统打包成内部资源:

  1. 创建一个.qrc文件,比如resources.qrc,内容示例:
<RCC>
    <qresource prefix="/">
        <file>static/image/icon.ico</file>
        <file>views/main_window.ui</file>
        <file>static/font/xxx.ttf</file>
    </qresource>
</RCC>
  1. 用pyrcc5工具把它编译成Python文件:
pyrcc5 resources.qrc -o resources_rc.py
  1. 在你的代码里导入这个resources_rc.py,之后就可以用:static/image/icon.ico这样的路径访问资源,PyInstaller会把这些资源打包进程序内部,不会暴露在外部目录。

3. 加密PYZ归档提升源码安全性

PyInstaller支持对PYZ归档(里面存的是编译后的Python字节码)进行加密,你可以在spec文件的PYZ部分添加密钥:

pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher, key='你的自定义密钥')

这样别人即使拿到PYZ文件,也需要密钥才能解压反编译,大大提升了逆向的难度。

4. 混淆Python字节码

如果想要进一步保护源码,可以用第三方工具比如PyArmor对Python代码进行混淆,再用PyInstaller打包:

  • 先用PyArmor加密你的所有Python源码文件,生成加密后的字节码。
  • 修改你的spec文件,指向加密后的文件进行打包,这样即使字节码被提取出来,也是经过混淆的,难以还原成可读的源码。

5. 加密外部必要资源并动态加载

如果有些资源必须放在外部(比如翻译文件*.qm、messages_translation.json),可以先对这些文件进行加密,程序启动时再解密到临时目录使用,退出时自动清理临时文件:

  • 比如用AES加密这些资源文件,把加密后的文件作为datas打包。
  • 在程序初始化时,读取加密文件,解密到tempfile创建的临时目录,然后加载这些资源,程序退出时删除临时文件。

备注:内容来源于stack exchange,提问作者Yousef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:29:30