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

Pyinstaller打包Django项目调用collect_submodules导入djoser.urls失败求助

问题原因

这个报错的核心是PyInstaller钩子执行collect_submodules('djoser.urls')时,导入djoser.urls会触发Django配置加载逻辑,但打包阶段运行环境未初始化Django配置,导致导入失败,无法完成依赖收集。

解决方案
  • 方案1:修改hook文件,提前初始化Django配置
    不要把钩子文件放在全局site-packages目录,建议放到你的Django项目根目录,新建hook-djoser.urls.py,内容如下:
    import os
    import django
    # 替换为你项目的settings路径
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "royalback.settings")
    django.setup()
    
    from PyInstaller.utils.hooks import collect_submodules
    hiddenimports = collect_submodules('djoser.urls')
    
  • 方案2:手动枚举依赖,跳过自动收集
    如果你明确项目用到的djoser.urls下的子模块,不需要写钩子,直接在打包命令中添加对应隐式导入即可,例如:
    --hidden-import djoser.urls.authtoken --hidden-import djoser.urls.jwt
    
    根据你实际用到的djoser路由模块添加对应参数即可。
调整打包命令

你需要在原有打包命令基础上添加必要参数,完整命令参考(Windows环境):

pyinstaller --noconfirm --onedir --console --name "royalback" ^
--additional-hooks-dir . ^
--collect-data djoser ^
--collect-data rest_framework ^
--add-data "C:/Users/Shudf/royalback/templates;templates" ^
--add-data "C:/Users/Shudf/royalback/static;static" ^
"C:/Users/Shudf/royalback/manage.py"

参数说明:

  • --additional-hooks-dir . 读取当前项目目录下的自定义钩子文件
  • --collect-data 收集第三方库的静态资源、配置文件等非代码内容
  • --add-data 把你自己项目的模板、静态文件打包到产物中
运行产物注意事项

打包完成后运行exe前,需要先在终端设置环境变量,或者直接把配置写在manage.py最开头:

set DJANGO_SETTINGS_MODULE=royalback.settings
royalback.exe runserver

内容的提问来源于stack exchange,提问作者marcelo.delta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:54:07