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

使用Nuitka将多Python/JSON文件打包为单可执行文件的问题

解决方案

问题根源

你的核心问题在于原代码用subprocess直接调用.py文件,Nuitka编译后无法通过这种方式运行未打包的Python脚本,强行包含.py文件又会导致冗余。要实现单EXE+高混淆性,需要调整代码结构并配合正确的Nuitka编译参数。

步骤1:重构代码,替换subprocess为多进程调用

将main.py和port.py的入口逻辑封装为可调用函数,在launcher.py中用Python多进程模块启动,避免依赖外部脚本文件。

  1. 修改main.py:
# main.py
def main():
    # 放入原main.py中if __name__ == "__main__":下的所有逻辑
    print("Running main process")

if __name__ == "__main__":
    main()
  1. 修改port.py:
# port.py
def main():
    # 放入原port.py中if __name__ == "__main__":下的所有逻辑
    print("Running port process")

if __name__ == "__main__":
    main()
  1. 修改launcher.py:
# launcher.py
import multiprocessing
import time
import main
import port

if __name__ == "__main__":
    # 启动port进程
    proc1 = multiprocessing.Process(target=port.main)
    proc1.start()

    time.sleep(1)

    # 启动main进程
    proc2 = multiprocessing.Process(target=main.main)
    proc2.start()

    # 等待main进程结束
    proc2.join()
    # 终止port进程并回收资源
    proc1.terminate()
    proc1.join()

步骤2:用Nuitka编译为单EXE

使用以下命令编译,生成单个可执行文件,同时包含config.json数据文件:

nuitka --onefile --include-data-file=config.json=config.json --follow-imports launcher.py

参数说明

  • --onefile:生成单个独立EXE文件,所有依赖(DLL、编译后的模块)都会被打包进该文件,运行时自动解压到临时目录
  • --include-data-file=config.json=config.json:将config.json作为数据文件打包进EXE,运行时会被提取到对应目录
  • --follow-imports:自动跟随导入的main和port模块,将它们编译进EXE,无需手动指定

效果说明

  • 最终仅生成一个launcher.exe文件,无冗余.py文件
  • 所有Python代码都会被Nuitka转换为C代码后编译,具备良好的混淆性,难以逆向解析
  • 运行时自动处理依赖,无需额外携带第三方DLL

内容的提问来源于stack exchange,提问作者Pratyush Rai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:10:03