CentOS下Apache/Wsgi从本地环境切换至virtualenv遇阻
Django 应用从本地环境迁去 Virtualenv 的实操步骤
一、先把虚拟环境激活再说
首先得确保你已经激活了目标虚拟环境,终端里敲这个命令就行:
source [PATH_TO_VIRTUALENV]/bin/activate
激活成功的话,终端前缀会显示你的虚拟环境名称,这时候所有 Python 相关的操作都会默认用这个环境里的解释器和包,不会再碰本地系统的 Python 了。
二、处理应用代码的小细节
其实你的 Django 应用代码不用挪位置,重点是让它“认”虚拟环境。这里有两个小地方要检查:
- 打开应用根目录的
manage.py,第一行的 shebang 最好写成#!/usr/bin/env python,这样激活虚拟环境后,直接跑./manage.py runserver会自动用虚拟环境里的 Python,不用手动指定路径。 - 如果你的代码里有硬编码的包路径(一般不推荐这么写),得全部改成虚拟环境的路径,或者干脆删掉硬编码,让 Python 自己从虚拟环境的包目录找依赖。
三、再核对一遍依赖是不是真的完全一致
虽然你说已经装了和本地一模一样的包,但还是建议再核对一遍,避免漏装或者版本错了:
- 先导出本地环境的依赖清单(没做过的话现在做):
pip freeze > local_requirements.txt - 激活虚拟环境后,也导出一份:
pip freeze > venv_requirements.txt - 用
diff命令对比两个文件:
如果有差异,赶紧用diff local_requirements.txt venv_requirements.txtpip install把缺的或者版本不对的包补上。
四、测试应用能不能正常跑
接下来就是最关键的测试环节,一步步来:
- 先跑数据库迁移,确保虚拟环境里的 Django 能正常连接数据库:
python manage.py migrate - 启动开发服务器:
python manage.py runserver - 然后去访问应用的各个核心功能,比如提交表单、调用接口,看看有没有报错(比如导入错误、找不到依赖这种),没问题的话就基本ok了。
五、生产环境部署的注意事项(如果需要的话)
要是你还要部署到生产环境,得注意这几点:
- 像 uWSGI、Gunicorn 这类服务器的配置文件,要指定虚拟环境的 Python 解释器路径,比如 uWSGI 的配置可以这么写:
[uwsgi] pythonpath = [PATH_TO_VIRTUALENV]/lib/python2.7/site-packages module = wsgi:application - 还要确保服务器上的虚拟环境权限没问题,应用进程能访问到虚拟环境的包目录。
六、后续环境管理的小技巧
既然你想实现按需回滚,给你几个小建议:
- 每次更新包之前,先导出当前虚拟环境的依赖清单做个快照,比如:
pip freeze > venv_snapshot_20240520.txt - 要是更新后出问题了,直接用快照回滚就行:
pip install -r venv_snapshot_20240520.txt - 还可以多建几个虚拟环境,比如一个稳定版、一个测试版,切换起来更灵活,不用在一个环境里反复折腾。
内容的提问来源于stack exchange,提问作者Shovalt
相关产品推荐
相关产品推荐

