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

Django4.0用PyInstaller5.1打包后运行runserver报脚本不存在错误

报错原因

这个错误由两个核心问题触发:

  1. Django开发服务器默认的自动重载机制与PyInstaller打包环境不兼容:Django的autoreload模块启动时会查找磁盘上的原始入口脚本manage.py,但打包后该脚本已被编译嵌入exe内部,不存在实体.py文件,模块会误将传入的runserver参数识别为待执行的脚本路径,直接抛出文件不存在的错误。
  2. 现有.spec配置缺失必要的打包规则:没有收集Django内置资源、项目模块、静态文件、数据库文件,就算绕过重载报错,后续也会出现模块导入失败、资源404等问题。
修复步骤
  • 禁用打包环境下的Django自动重载
    两种实现方式选其一即可:
    • 临时方案:启动exe时追加--noreload参数,命令如下:
      .\manage.exe runserver --noreload
      
    • 永久方案:修改manage.py代码,检测到打包环境时自动追加禁用重载的参数,无需每次启动手动输入。修改后的main函数代码:
      def main():
          """Run administrative tasks."""
          os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'muviny.settings')
          # 检测PyInstaller打包环境,强制关闭自动重载
          if getattr(sys, 'frozen', False):
              sys.argv.append('--noreload')
          try:
              from django.core.management import execute_from_command_line
          except ImportError as exc:
              raise ImportError(
                  "Couldn't import Django. Are you sure it's installed and "
                  "available on your PYTHONPATH environment variable? Did you "
                  "forget to activate a virtual environment?"
              ) from exc
          execute_from_command_line(sys.argv)
      
  • 补全.spec文件的打包配置
    打开你现有的manage.spec文件,按如下规则修改:
    1. 在文件最顶部导入PyInstaller内置的Django资源收集工具:
      import os
      from PyInstaller.utils.hooks import collect_django_dependencies, collect_static_files, collect_submodules
      
    2. 替换原Analysis段的pathex、datas、hiddenimports配置,补全资源和模块收集规则:
      a = Analysis(
          ['manage.py'],
          pathex=[os.path.abspath('.')],
          binaries=[],
          datas=collect_static_files() + [
              ('muviny', 'muviny'),  # 替换为你自己的项目配置目录名
              ('webapp', 'webapp'),  # 你自行开发的app目录
              ('db.sqlite3', '.')    # SQLite数据库文件,用其他数据库可以删掉这行
          ],
          hiddenimports=collect_django_dependencies() + collect_submodules('webapp') + collect_submodules('muviny'),
          hookspath=[],
          hooksconfig={},
          runtime_hooks=[],
          excludes=[],
          win_no_prefer_redirects=False,
          win_private_assemblies=False,
          cipher=block_cipher,
          noarchive=False,
      )
      
  • 重新打包并验证
    执行命令基于修改后的spec文件重新打包:
    pyinstaller manage.spec
    
    打包完成后进入dist/manage目录,直接执行.\manage.exe runserver即可正常启动服务。
补充说明
  • runserver是Django自带的开发服务器,仅适合本地调试使用,生产环境建议替换为waitress、gunicorn等生产级WSGI服务器
  • 后续新增app、静态资源、模板文件时,需要同步在spec文件的datas和hiddenimports配置中添加对应目录的收集规则
  • 如果启动后出现静态资源404、模板不存在的报错,优先检查对应目录是否被正确加入datas配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:36:26