宝塔8.x的python项目管理器不会自动创建虚拟环境,需手动用python3 -m venv生成并安装依赖;启动命令须用gunicorn而非runserver,且项目路径要指向django根目录。

宝塔面板里 Python 项目管理器根本不会自动创建虚拟环境
宝塔 8.x 的「Python 项目管理器」界面写着“自动创建虚拟环境”,但实际点击「添加项目」后,venv 目录压根不会生成,requirements.txt 也完全不读取——它只负责拉起 gunicorn 或 uWSGI 进程,依赖安装和环境隔离得手动补全。
真正能用的路径是:先用宝塔终端手动生成 venv,再把项目路径、启动命令、依赖文件三者对齐到 Python 项目管理器的配置字段里。
- 项目路径必须指向含
manage.py的 Django 根目录(不是venv所在目录) - 运行目录填同一路径,否则
os.getcwd()错位会导致静态文件 404 或数据库迁移失败 - 启动命令别写
python manage.py runserver—— 宝塔会把它当开发模式硬杀,必须用gunicorn myproject.wsgi:application
手动创建 venv 后,pip install 总报错 “No module named ‘_ctypes’”
这是宝塔默认 Python(通常是系统自带的 Python 3.7/3.8)缺失 libffi-dev 编译依赖,导致 pip 装 cryptography、psycopg2 等 C 扩展时跪倒。
解决方式不是换 Python 版本,而是进终端执行:
apt-get update && apt-get install -y libffi-dev
如果用的是 CentOS/AlmaLinux:
yum install -y libffi-devel
装完再进你的项目目录运行:
python3 -m venv venv<br>source venv/bin/activate<br>pip install --upgrade pip<br>pip install -r requirements.txt
- 务必用
python3 -m venv,不用virtualenv—— 宝塔自带的virtualenv命令可能指向旧版,不兼容 Python 3.9+ -
requirements.txt里别写django==4.2.7这种死版本,留Django>=4.2, 更稳,避免某天 <code>pip因 wheel 缺失卡住
配置 Python 项目管理器时,“项目端口”和“反向代理”怎么配才不冲突
宝塔的「项目端口」不是给用户访问用的,它只是告诉 gunicorn 绑哪个本地端口(比如 8001),而用户真正访问的是 Nginx 反向代理的 80/443。两者必须严格分离,否则会出现 502 或请求直接打到 gunicorn 的 debug 页面上。
- Python 项目管理器中「项目端口」填
8001(或任意未被占用的 1024–65535 端口) - Nginx 配置里 proxy_pass 必须写
http://127.0.0.1:8001,不能写http://localhost:8001(某些系统下解析慢导致超时) - 删掉 Django
settings.py里的ALLOWED_HOSTS = ['*'],换成具体域名,比如['mycompany.com', 'www.mycompany.com'],否则 Nginx 传来的Host头会被 Django 拒绝
静态文件 collectstatic 后仍 404?Nginx 配置漏了 alias
宝塔不会自动帮你配静态资源路径,Django 的 collectstatic 把所有 static/ 文件扔进 STATIC_ROOT(比如 /www/wwwroot/myproject/staticfiles),但 Nginx 默认不服务这个目录。
进网站设置 → 配置文件,在 server 块里加一段:
location /static/ {<br> alias /www/wwwroot/myproject/staticfiles/;<br>}
-
alias结尾必须带/,且路径末尾也要有/,少一个斜杠就 404 - 别用
root替代alias——root会拼接 URI,导致请求/static/css/app.css实际去找/www/wwwroot/myproject/staticfiles/static/css/app.css - 媒体文件(
media/)同理,加另一段location /media/ { alias /www/wwwroot/myproject/media/; }
这些路径一旦写错,日志里只会显示 “open() failed (2: No such file or directory)”,不会告诉你缺了哪个斜杠。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










