PyInstaller打包Django报错 无法获取pixel.settings的INSTALLED_APPS
报错根因
核心问题是PyInstaller运行Django自动收集钩子时,Python导入路径无法定位到pixel.settings模块。你当前spec文件内的pathex配置指向错误,同时缺少项目资源打包规则,就算绕过当前报错,后续运行exe也会出现静态资源丢失、数据库找不到等问题。
修复步骤
- 修正
pathex路径:你现在配置的C:/Users/Alex_x/Desktop/Pixel/pixel是项目内部包目录,要改成manage.py所在的根目录C:/Users/Alex_x/Desktop/Pixel,只有在这个路径下Python才能识别到pixel包,正常导入pixel.settings。 - 补全
datas打包规则:把项目的代码文件、数据库、静态资源、媒体资源都纳入打包范围,替换Analysis块里的datas字段内容为:
datas=[ ('pixel', 'pixel'), ('db.sqlite3', '.'), ('static', 'static'), ('media', 'media'), ],
- 补全缺失的隐藏导入:你当前的hiddenimports列表漏了自定义的brain应用相关模块,把
brain、brain.apps、brain.apps.BrainConfig、brain.views、brain.models、brain.urls加到列表里,避免PyInstaller漏扫自定义模块。 - 打包前预设环境变量:执行打包命令前,先在当前命令行窗口运行
set DJANGO_SETTINGS_MODULE=pixel.settings,避免PyInstaller的Django钩子读不到配置模块路径。 - 清理旧打包产物:删掉之前生成的build、dist文件夹,再执行
pyinstaller manage.spec重新打包。
额外配置修正
你settings.py里的静态文件路径写的是硬编码相对路径,打包后会找不到文件,把STATICFILES_DIRS改成基于BASE_DIR的绝对路径写法:
STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'pixel/apps/brain/static'), ]
如果后续打包后运行提示缺少某个模块,直接把对应模块名加到hiddenimports列表里重新打包即可。
内容的提问来源于stack exchange,提问作者MSNN Music
相关产品推荐
相关产品推荐

