需求:
1、现在我们已经安装了多个python版本,但是这还不够, 某些有洁癖的程序员是一定要系统环境足够干净的,这时候我们可以使用virtualenv来创建虚拟python环境。
2、pyenv用于不同python版本之间的切换,还有一种场景就是在确定了python版本之后,需要第三方包不同版本之间的切换,比如不同版本的django版本之间的版本切换,又比如应用A需要jinja 2.7,而应用B需要jinja 2.6,于是就有了virutalenv。
解决方案:虚拟环境
虚拟环境其实就是对真实pyhton环境的复制,这样我们在复制的python环境中安装包就不会影响到真实的python环境。通过建立多个虚拟环境,在不同的虚拟环境中开发项目就实现了项目之间的隔离。
virtualenv本是一个独立的工具,官网在这里:https://pypi.python.org/pypi/virtualenv
幸运的是,如果你是安装我们前面的方式安装pyenv的,那它已经帮我们以plugin的形式安装好了virtualenv,我们只要使用就好了。pyenv 解决的是同一个系统中不同版本的 python 并存的问题,而 pyenv-virtualenv 解决的是不同项目所依赖的软件包之间可能产生冲突的问题。
请参考:
否则,请先安装virtualenv:
~ pip install virtualenv
# 使用说明请见:
# https://www.liaoxuefeng.com/wiki/1016959663602400/1019273143120480 # 或 https://www.jianshu.com/p/a8129d12dbc7
# 在本文,我们假定环境为已安装pyenv。
首假定我们创建一个3.7.3的虚拟环境:
~ pyenv virtualenv 3.7.3 env373
Looking in links: /var/folders/g5/y2s0vp1506g5ybtgk5wz8l4r0000gn/T/tmpm9nyjb79
Requirement already satisfied: setuptools in /Users/xxx/.pyenv/versions/3.7.3/envs/env373/lib/python3.7/site-packages (40.8.0)
Requirement already satisfied: pip in /Users/xxx/.pyenv/versions/3.7.3/envs/env373/lib/python3.7/site-packages (19.0.3)
~ ls -al /Users/xxxx/.pyenv/versions
total 0
drwxr-xr-x 5 xxx staff 160 11 10 17:31 .
drwxr-xr-x 6 xxx staff 192 11 10 17:31 ..
drwxr-xr-x 6 xxx staff 192 11 10 15:30 2.7.16
drwxr-xr-x 7 xxx staff 224 11 10 17:31 3.7.3
lrwxr-xr-x 1 xxx staff 43 11 10 17:31 env373 -> /Users/xxx/.pyenv/versions/3.7.3/envs/env373
~ pyenv versions
*system (set by /Users/xxx/.pyenv/version)
2.7.16
3.7.3
3.7.3/envs/env373
env373
说明:
1、如果你是通过Cakebrew安装的pyenv,请也安装上pyenv-virtualenv。
2、命令中的“3.7.3”必须是一个安装前面步骤已经安装好的Python版本, 否则会出错。
3、~/.pyenv/versions/env373是个软链接(符号链接)
手动切换到新的虚拟环境的命令为:
~ pyenv activate env373
~ pyenv version #显示当前目录下采用的 python 版本
手动退出虚拟环境切换回系统环境的命令为:
~ pyenv deactivate
pyenv-virtualenv 支持自动激活和退出虚拟环境。首先确保在 shell 配置文件中添加了:
~ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
~ exec $SHELL
接着在需要使用虚拟环境的目录(通常是项目目录)中:建立一个.python-version的文本文件,将虚拟环境名称(如env373)写在里面即可。之后每次进/出该目录时,虚拟环境都将自动激活/退出。
删除虚拟环境:
rm -rf ~/.pyenv/versions/env373/
官方文档:https://github.com/pyenv/pyenv-virtualenv/blob/master/README.md
发表回复