宝塔python项目管理器不支持django自动识别,需手动指定wsgi入口(如myproject/wsgi.py中的application)、正确设置项目路径、虚拟环境权限、static_root收集及nginx静态映射。

宝塔 Python 项目管理器不支持 Django 自动识别?别硬等,手动指定入口
宝塔的「Python 项目管理器」本质是用 gunicorn 或 uWSGI 启动 WSGI 应用,它不会自动解析 settings.py 或识别 manage.py。你必须明确告诉它:WSGI 模块在哪、应用变量叫什么。
- 入口文件路径填项目根目录下的
myproject/wsgi.py(不是manage.py) - 应用入口填
application(这是wsgi.py里默认导出的 WSGI callable) - 项目路径必须指向包含
manage.py的那一层(即 Django 项目根目录),否则import myproject.settings会失败 - 如果报
ModuleNotFoundError: No module named 'myproject',大概率是Python 路径没加项目根目录——在「项目配置」里手动追加/www/wwwroot/myproject
虚拟环境必须用绝对路径,且用户权限要对得上
宝塔运行 Python 项目时用的是 www 用户,而你用 root 创建的虚拟环境,www 很可能没读取权限。直接在面板里点「创建虚拟环境」最稳妥,它会自动设好权限和路径。
- 不要用
python -m venv在终端手建后拖进面板——路径可能错、权限可能锁死、Python 版本可能不匹配面板所选版本 - 面板创建的虚拟环境路径形如
/www/server/python_project/venv_myproject,这个路径必须完整填进「Python 环境」栏 - 确认虚拟环境里的
pip装了Django和gunicorn(或uWSGI):source /www/server/python_project/venv_myproject/bin/activate && pip list | grep -E "(Django|gunicorn|uWSGI)" - 如果用了
requirements.txt,在面板「依赖管理」里上传并安装,别漏掉psycopg2-binary(PostgreSQL)或mysqlclient(MySQL)这类 C 扩展包
静态文件收集(collectstatic)不能靠面板自动执行
宝塔 Python 项目管理器只管启动服务,不运行 manage.py 命令。Django 的 STATIC_ROOT 不手动收集,Nginx 就找不到 CSS/JS。
- 先在项目配置里设置好
STATIC_ROOT = '/www/wwwroot/myproject/staticfiles'(路径需存在且www可写) - SSH 登录后,手动激活虚拟环境并执行:
source /www/server/python_project/venv_myproject/bin/activate && cd /www/wwwroot/myproject && python manage.py collectstatic --noinput - 然后在宝塔「网站」设置里,为该域名添加静态路径映射:
location /static/ { alias /www/wwwroot/myproject/staticfiles/; } - 别忘了把
DEBUG = False,否则runserver模式下静态文件才被自动 serve,上线后完全失效
502 Bad Gateway?重点查 gunicorn 日志和 socket 权限
最常见 502 不是代码问题,而是 gunicorn 根本没起来,或者 Nginx 连不上它的 socket 文件。
- 看面板「日志」页签里的「错误日志」,第一行往往是关键:
connect() to unix:/tmp/gunicorn_myproject.sock failed (13: Permission denied)→ socket 文件属主不是www - 检查
gunicorn启动命令是否带--user=www --group=www(宝塔默认加了,但如果你改过配置就可能丢) - socket 路径别用
/tmp/——部分系统会定期清理,推荐用/www/server/python_project/sock/myproject.sock并确保目录存在且chown www:www - 如果日志里出现
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty,说明settings.py里没正确设置SECRET_KEY,或环境变量没传进去(面板「环境变量」里补上SECRET_KEY=xxx)
gunicorn 命令的输出。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










