本地正常的Django应用部署到PythonAnywhere出现未处理异常
排查PythonAnywhere部署Django应用出现Unhandled Exception的方案
可能的问题点及修复步骤
1. yt-dlp 安装/权限/网络问题
PythonAnywhere免费环境里,yt-dlp很容易出问题:要么没装对虚拟环境,要么没执行权限,甚至可能因网络限制无法访问YouTube。
- 操作步骤:
- 打开PythonAnywhere控制台,激活你的虚拟环境,重新安装yt-dlp:
pip install yt-dlp - 验证安装路径:运行
which yt-dlp,确保路径在虚拟环境的bin目录下(比如/home/kristjan/.virtualenvs/your_env/bin/yt-dlp) - 测试yt-dlp可用性:运行
yt-dlp --version,如果报网络错误,大概率是IP被YouTube屏蔽,免费版偶尔会出现这种情况,可以尝试更换yt-dlp版本或者等一段时间再试
- 打开PythonAnywhere控制台,激活你的虚拟环境,重新安装yt-dlp:
2. SQLite 数据库权限问题
就算执行了migrate,数据库文件所在目录或文件本身可能没有读写权限。
- 操作步骤:
- 控制台里查看数据库文件权限:
ls -l db.sqlite3,确保当前用户(kristjan)有读写权限 - 权限不足的话,修改文件权限:
chmod 664 db.sqlite3,同时给目录加权限:chmod 775 /home/kristjan/your_project_dir
- 控制台里查看数据库文件权限:
3. WSGI 配置错误
别光看表面配置,路径或虚拟环境激活脚本可能藏着问题。
- 操作步骤:
- 打开WSGI文件,确认虚拟环境激活代码正确,比如:
import os import sys # 激活虚拟环境 activate_this = '/home/kristjan/.virtualenvs/your_env/bin/activate_this.py' with open(activate_this) as file_: exec(file_.read(), dict(__file__=activate_this)) # 添加项目路径到sys.path project_path = '/home/kristjan/your_project_dir' if project_path not in sys.path: sys.path.insert(0, project_path) # 设置Django配置 os.environ['DJANGO_SETTINGS_MODULE'] = 'your_project.settings' from django.core.wsgi import get_wsgi_application application = get_wsgi_application() - 确认
DJANGO_SETTINGS_MODULE指向正确的settings文件,并且生产环境必须把DEBUG设为False,开着DEBUG不仅不安全,也可能触发未处理的异常
- 打开WSGI文件,确认虚拟环境激活代码正确,比如:
4. 静态文件未正确收集
静态文件映射配置对了,但没执行collectstatic也是白搭。
- 操作步骤:
- 激活虚拟环境后,执行
python manage.py collectstatic,把所有静态文件统一收集到配置的静态目录 - 核对Web Tab里的静态文件映射:URL
/static/对应的本地路径必须是你收集静态文件的目录(比如/home/kristjan/your_project_dir/static_root/)
- 激活虚拟环境后,执行
5. 优先查看详细错误日志
上面的都是通用排查,最有效的是看PythonAnywhere的错误日志,里面有具体的异常信息。
- 操作步骤:
- 进入Web Tab,点击"Error log"拉到最新的错误记录,比如有没有
ImportError(模块没装对)、PermissionError(权限不够)、OperationalError(数据库连不上) - 根据日志里的具体报错针对性修复,比如看到
No module named 'yt_dlp'就重新装一遍yt-dlp
- 进入Web Tab,点击"Error log"拉到最新的错误记录,比如有没有
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

