Pyinstaller打包Django REST Framework应用缺失模板,可浏览API报错
这个问题我之前帮朋友解决过,确实是PyInstaller打包Django+DRF时的常见坑——API接口能正常调用,但DRF自带的可浏览API页面因为找不到模板报错,本质就是PyInstaller没把DRF的UI模板文件打包进去。下面给你几种靠谱的解决办法:
解决方法一:打包时用
--add-data参数手动指定模板路径 首先你得找到DRF模板所在的位置,打开Python终端运行这段代码就能拿到:
import rest_framework print(rest_framework.__path__)
输出的路径类似['C:\\your_venv\\Lib\\site-packages\\rest_framework'],后面加上/templates就是模板文件夹的完整路径。
然后用PyInstaller打包时加上--add-data参数,Windows系统用分号分隔源路径和目标路径,Linux/macOS用冒号:
# Windows示例 pyinstaller --add-data "C:\\your_venv\\Lib\\site-packages\\rest_framework\\templates;rest_framework/templates" manage.py # Linux/macOS示例 pyinstaller --add-data "/your_venv/lib/python3.x/site-packages/rest_framework/templates:rest_framework/templates" manage.py
这个参数的作用是把DRF的模板文件夹复制到打包后的dist/app/rest_framework/templates目录下,让Django能找到它们。
解决方法二:通过修改spec文件配置(更适合复杂项目)
如果你的打包需求比较复杂,用spec文件会更灵活。首先生成spec文件:
pyinstaller --name=your_app_name manage.py
然后打开生成的your_app_name.spec文件,找到datas列表,把DRF模板的路径添加进去:
datas = [ # 这里可以加你项目自己的静态文件、模板等 ('C:\\your_venv\\Lib\\site-packages\\rest_framework\\templates', 'rest_framework/templates'), ]
保存后用spec文件重新打包:
pyinstaller your_app_name.spec
额外注意点
- 确保你的Django项目
settings.py里的INSTALLED_APPS已经包含'rest_framework',这个你应该已经加了,不然API也没法正常运行 - 如果还有其他第三方库的模板或静态文件需要打包,都可以用同样的方法添加到
--add-data或者spec的datas里
这样应该就能解决TemplateDoesNotExist的问题,打开可浏览API页面就能正常显示了。
内容的提问来源于stack exchange,提问作者Mostafa Hassan
相关产品推荐
相关产品推荐

