Windows生产环境Django项目如何映射虚拟环境Python替代全局版本
Windows 10 环境 Nginx+Waitress 部署的 Django 项目切换 Python 虚拟环境配置方案
Nginx 仅做反向代理转发,和后端 Python 解释器路径没有直接耦合,不需要修改 Nginx 侧的映射规则,核心逻辑只有一点:让 Waitress 进程从虚拟环境启动,调用虚拟环境内置的 Python 解释器加载 Django 项目即可,具体操作步骤如下:
1. 初始化生产虚拟环境
选好虚拟环境存放路径(建议放在Django项目根目录下方便维护),执行命令创建指定版本的虚拟环境:
:: 调用全局 Python 3.9.5 创建虚拟环境,路径替换成你自己的实际路径 C:\Python39\python.exe -m venv D:\prod_app\django_venv
激活虚拟环境安装项目依赖,确保所有依赖版本和之前全局环境完全一致,避免兼容性问题:
:: 进入虚拟环境脚本目录执行激活 cd D:\prod_app\django_venv\Scripts activate.bat :: 切到Django项目根目录安装依赖 cd D:\prod_app\my_django_project :: 有导出的requirements.txt直接执行批量安装 pip install -r requirements.txt :: 没有提前导出的话至少安装对应版本的Django和Waitress pip install django==<原全局环境Django版本> waitress==<原全局环境Waitress版本>
依赖装完执行python manage.py check,没有报错说明虚拟环境配置正常。
2. 调整Waitress启动配置
先在任务管理器结束之前用全局Python启动的Waitress进程,避免端口占用。
临时验证启动
不需要提前激活虚拟环境,直接调用虚拟环境内的可执行文件启动Waitress即可:
:: 方式1:调用虚拟环境内的python.exe启动 D:\prod_app\django_venv\Scripts\python.exe D:\prod_app\my_django_project\manage.py runserver 0.0.0.0:8000 :: 方式2:直接调用虚拟环境Scripts目录下的waitress-serve.exe启动,更稳定 D:\prod_app\django_venv\Scripts\waitress-serve.exe --port=8000 --chdir=D:\prod_app\my_django_project my_project.wsgi:application
启动后本地访问127.0.0.1:8000,确认项目能正常加载、没有依赖缺失报错。
生产开机自启配置
如果你之前用批处理脚本、任务计划程序或者NSSM把Waitress注册成了系统服务,只需要把启动路径替换为虚拟环境内的对应可执行文件即可:
- 批处理脚本示例:
@echo off chcp 65001 :: 替换为你虚拟环境内的waitress-serve实际路径 D:\prod_app\django_venv\Scripts\waitress-serve.exe --port=8000 --chdir=D:\prod_app\my_django_project my_project.wsgi:application
- 用NSSM注册服务的,直接在服务配置的
Path栏选中虚拟环境Scripts目录下的waitress-serve.exe,启动参数保持原来的端口、wsgi路径配置不变,保存后重启服务即可。
3. 验证整体服务
Waitress从虚拟环境启动成功后,Nginx不需要做任何配置修改——只要Waitress监听的端口和之前Nginx反向代理配置的端口一致,Nginx完全感知不到后端Python环境的切换。直接通过域名/服务器IP访问项目,所有功能测试正常就完成切换。
注意事项:
- 切换完成后建议卸载全局Python环境中安装的Django、Waitress及项目专属依赖,避免后续误启动全局Python进程造成环境冲突
- 后续执行静态文件收集、数据库迁移、定时任务等项目相关脚本时,都要调用虚拟环境内的Python解释器执行,否则会出现依赖找不到的报错
内容的提问来源于stack exchange,提问作者user3288051
相关产品推荐
相关产品推荐

