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

使用CX-Freeze打包含Pyrogram的Python代码时模块导入失败求助

解决CX-Freeze打包Pyrogram代码失败的问题

核心问题分析

CX-Freeeze的自动依赖检测对Pyrogram这类包含大量动态导入、内部子模块的库支持不足,哪怕你只导入了Client类,也需要明确指定其所属的子模块及关联依赖库,而非仅声明顶层的pyrogram包。另外Windows下使用Win32GUI作为base会屏蔽控制台输出,不利于调试错误。

解决方案步骤

  1. 补全依赖配置
    修改setup.py的build_exe_options,明确包含Pyrogram核心子模块、关联依赖库,同时暂时切换到控制台模式排查问题:

    修改后的setup.py:

    import sys
    from cx_Freeze import setup, Executable
    
    # 明确指定需要打包的包和模块,覆盖自动检测的不足
    build_exe_options = {
        "packages": ["os", "pyrogram", "cryptography", "idna"],
        "includes": ["pyrogram.client", "pyrogram.filters", "pyrogram.session", "pyrogram.methods"],
        "include_files": []
    }
    
    # 先改用控制台模式调试,确认打包成功后再切换回Win32GUI(如果需要)
    base = None
    # if sys.platform == "win32":
    #     base = "Win32GUI"
    
    setup(
        name="App",
        version="1.0",
        description="App description",
        options={"build_exe": build_exe_options},
        executables=[Executable("app.py", base=base)]
    )
    
  2. 处理Pyrogram的证书文件(关键)
    Pyrogram依赖CA证书文件建立SSL连接,CX-Freeeze通常不会自动打包该文件。找到Pyrogram安装目录下的cacert.pem(一般在Python环境的Lib/site-packages/pyrogram/cacert.pem),将其添加到include_files中:

    # 替换成你实际的cacert.pem路径
    build_exe_options["include_files"] = [("你的路径/cacert.pem", "pyrogram/cacert.pem")]
    
  3. 执行打包并调试
    运行打包命令:

    python setup.py build
    

    进入build目录下的可执行文件目录,运行程序,此时控制台会输出详细错误(若仍有问题),根据报错提示补充缺失的模块或文件即可。

  4. 切换回GUI模式(按需)
    确认控制台模式打包成功后,取消setup.py中base = "Win32GUI"的注释,重新打包即可。

额外提示

  • 确保Python环境已安装所有依赖:pip install pyrogram cx-freeze cryptography idna
  • 若仍出现缺失模块的错误,直接将报错中的模块名添加到includes列表即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:45:35