如何在含Python2且PATH会被修改的Windows Server2008部署Python3+Django2.0
解决Windows Server下Python2与Python3共存导致Django部署失败的方案
我之前在Windows Server环境里也碰到过一模一样的多Python版本冲突问题,完全理解你不想动现有Python2环境的顾虑——毕竟牵一发而动全身。下面是几个亲测有效的温和方案,不用删除任何现有程序:
1. 让mod_wsgi绑定指定的Python3版本
这是最直接的核心解决方案,因为mod_wsgi本身是和特定Python版本编译绑定的,只要让Apache加载对应Python3的mod_wsgi模块,就能彻底绕开系统环境变量的影响:
- 先在你的Python3环境里安装对应版本的mod_wsgi:打开Python3的命令提示符,运行
pip install mod_wsgi - 安装完成后,执行
mod_wsgi-express module-config,你会得到一段类似这样的配置代码:LoadFile "c:/python37/python37.dll" LoadModule wsgi_module "c:/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd" WSGIPythonHome "c:/python37" - 把这段代码复制到Apache的
httpd.conf文件末尾,替换掉原来可能存在的mod_wsgi相关配置。这样Apache启动时会直接使用指定的Python3,完全不受系统环境变量里的Python2影响。
2. 用批处理自定义Apache启动环境
如果你的Apache是通过服务启动的,系统环境变量的变更可能会影响到服务进程。这时可以创建一个自定义批处理文件来启动Apache,在启动前临时设置Python3的环境变量(仅对当前Apache进程有效,不会修改系统全局变量):
创建start_apache.bat文件,内容如下(替换成你的实际路径):
@echo off :: 设置Python3的路径为优先 set PATH=C:\Python37;C:\Python37\Scripts;%PATH% set PYTHONHOME=C:\Python37 :: 启动Apache "C:\Apache24\bin\httpd.exe" -k start
以后用这个批处理启动Apache,它会在自己的进程环境里使用Python3,和其他程序的Python2环境完全隔离。
3. 使用Python虚拟环境彻底隔离
虚拟环境是Python生态里隔离依赖的标准方案,能让你的Django项目完全独立于系统Python:
- 用Python3创建虚拟环境:打开Python3命令提示符,运行
python -m venv C:\django_venv - 激活虚拟环境:
C:\django_venv\Scripts\activate.bat,然后安装Django和项目所需依赖 - 在Apache的
httpd.conf里,添加虚拟环境的配置:
同时确保mod_wsgi模块是对应Python3版本的(参考方案1),这样整个Django项目会完全运行在虚拟环境的Python3里,和系统的Python2没有任何交集。WSGIPythonHome "C:\django_venv" WSGIPythonPath "C:\你的Django项目根目录"
验证方案是否生效
可以在你的Django项目里加一个简单的视图,用来检查当前使用的Python版本和路径:
from django.http import HttpResponse import sys def check_python_env(request): info = f""" Python 可执行路径: {sys.executable}<br> Python 版本: {sys.version}<br> 当前路径列表: {sys.path} """ return HttpResponse(info)
访问这个视图,如果显示的是你指定的Python3路径和版本,就说明配置成功了。
内容的提问来源于stack exchange,提问作者HiRob
相关产品推荐
相关产品推荐

