前言
- 如果使用Django开发过很多项目就会发现,不同的工程会依赖不同的库,比如第一个工程使用的Django2.1.4版本,第二个工程使用的Django1.1.4版本,难免会造成冲突,又或者当工程文件越来越多,就会装越来越多的模块,难免使得python模块越来越臃肿。
- 所以在这里要介绍一款名叫virtualenv的工具,他的作用是可以在同一个系统下帮我们建立多个互不相同并且互不干扰的虚拟环境
- 注意:这里的虚拟环境不是虚拟一个新的系统或者是一个新的python,而是虚拟出新的python模块环境,不要混淆了。
virtualenv的安装以及使用
一.virtualenv的安装
pip3 install virtualenv
二. virtualev使用
- 第一步:创建一个文件夹用来管理虚拟环境
[root@VM_0_14_centos /]# mkdir environment
[root@VM_0_14_centos /]# cd environment/
- 第二步:进入创建的文件夹之后创建虚拟环境
virtualenv --no-site-packages --python=python3 venv
--site-packages #创建一个干净的虚拟环境
--python=python3 #设置解释器为python3
venv #虚拟环境名为venv
- 第三步:进入虚拟环境目录,激活虚拟环境
cd /environment/venv/bin #虚拟环境目录
source activate #激活虚拟环境,如下图出现venv证明成功进入了虚拟环境
pip3 list # 通过该条命令可以发现出现了新的模块环境,这就是虚拟环境的牛逼之处,就可以正常安装其它模块了,与物理环境互不干扰
- 第四步:退出虚拟环境
(venv) [root@VM_0_14_centos bin]# deactivate
确保win上的开发环境与Linux上的一致
- 本地开发,准备好了项目+依赖包环境
- 现在需要将项目上传至服务器,上线发布
- 要保证本地和服务器环境版本的一致
- 解决方案
1. 通过命令保证环境的一致性
pip3 freeze > requirements.txt
会在当前所在目录创建一个requirements文件,里面包含了当前环境的所有模块信息
2.上传至服务器后,在服务器下创建virtualenv,在venv中通过以下命令导入项目所需的模块依赖
pip3 install -r requirements.txt
virtualenvwrapper的使用
一.安装virtualenvwrapper
pip3 install virtualenvwrapper
- 安装成功后会在python的bin目录下出现出现以下文件,大家可以自行检查
二.设置环境变量,每次启动Linux都会启动该服务
第一步:编辑bashrc文件(系统启动自动加载的文件)
vim ~/.bashrc
第二步:在bashrc文件中写入以下三行代码
export WORKON_HOME=~/Envs #设置virtualenv的统一管理目录
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #添加virtualenvwrapper的参数,生成干净隔绝的环境
export VIRTUALENVWRAPPER_PYTHON=/opt/python380/bin/python3 #指定python解释器
第三步:执行virtualenvwrapper脚本
source /opt/python380/bin/virtualenvwrapper.sh # 这里会报错,博客最下面有解决方案
第四步:读取环境变量
source ~/.bashrc
使用virtualenvwrapper
- 创建虚拟环境,默认会进入这个虚拟环境
mkvirtualenv venv
2. 任意切换不同的虚拟环境
workon venv2
- 手停止当前虚拟环境
deactivate
- 删除虚拟环境
rmvirtualenv venv
遇到的坑坑坑
问题一:
- source ~/.bashrc失败,就是在运行 virtualenvwrapper.sh脚本的时候会报错,后来发现virtualenvwrapper_python的解释器默认用的/usr/bin/python,这里用的是python2的解释器,而不是我安装的python3解释器
[root@VM_0_14_centos bin]# rm -rf python
[root@VM_0_14_centos bin]# ln -s /opt/python380/bin/python3 /usr/bin/python
[root@VM_0_14_centos bin]# which python
/usr/bin/python
解决方案:
- 将/usr/bin/python删掉,将/usr/bin/python的软连接设置为python3的
问题二:
- mkvirtualenvwrapper venv时报错,错误信息如下:
OSError: Command /root/Envs/mydjango200/bin/python - setuptools pip wheel
解决方案:
- 将setuptools pip wheel三个模块全部升级一下,可是又发现因为用的是国外的源升级很慢,因此更改系统配置,替换成清华源,代码如下
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
- 然后升级三个模块
pip3 install --upgrade pip
pip3 install --upgrade setuptools
pip3 install --upgrade wheel
- 升级成功后,再创建虚拟环境就成功了
注意事项
- 创建虚拟环境时
- 每次创建好一个虚拟环境时一定要检查虚拟环境是否正常,有时候因为配置问题也许会创建出与物理环境有相同模块的虚拟环境,一定要注意,常用 pip3 list 来检查 如下图
- 在使用Django项目时,第一件事情就是检查是否已经进入了虚拟环境,虚拟环境是否配置正常,防止后期出现奇奇怪怪的bug。
大概就是这么多