对Python 两大环境管理神器 pyenv 和 virtualenv详解


Posted in Python onDecember 31, 2018

简介

pyenv 是一个开源的 Python 版本管理工具,可以轻松地给系统安装任意 Python 版本,想玩哪个版本,瞬间就可以切换。有了 pyenv,我们不需要再为系统多版本 Python 共存问题而发愁,也不用为手动编译安装其他 Python 版本而浪费时间,只需要执行一条简单的命令就可以切换并使用任何其他版本,该工具真正地做到了开箱即用,简单实用。

virtualenv 是一个用来创建完全隔离的 Python 虚拟环境的工具,可以为每个项目工程创建一套独立的 Python 环境,从而可以解决不同工程对 Python 包,或者版本的依赖问题。假如有 A 和 B 两个工程,A 工程代码要跑起来需要 requests 1.18.4,而 B 工程跑起来需要 requests 2.18.4,这样在一个系统中就无法满足两个工程同时运行问题了。最好的解决办法是用 virtualenv 给每个工程创建一个完全隔离的 Python 虚拟环境,给每个虚拟环境安装相应版本的包,让程序使用对应的虚拟环境运行即可。这样既不影响系统 Python 环境,也能保证任何版本的 Python 程序可以在同一系统中运行。

最佳实践:使用 pyenv 安装任何版本的 Python,然后用 virtualenv 创建虚拟环境时指定需要的 Python 版本路径,这样就可以创建任何版本的虚拟环境,这样的实践真是极好的!

pyenv 的安装及使用

1. 安装

将 pyenv 安装到 ~/.pyenv 目录(当然你可以安装到任意其他路径)

git clone https://github.com/yyuu/pyenv.git ~/.pyenv

配置环境变量(我的 Shell 是 zsh,如果是 bash,请添加到 ~/.bashrc)

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc

添加 pyenv 初始化(我的 Shell 是 zsh,如果是 bash,请添加到 ~/.bashrc)

echo 'eval "$(pyenv init -)"' >> ~/.zshrc

使当前 Shell 配置生效,完成安装

exec $SHELL
source ~/.zshrc

2. 使用

查看有哪些 Python 版本可以安装

pyenv install --list

安装某个 Python 版本

pyenv install -v 3.6.4

查看当前 Python 版本情况(* 表示系统当前的 Python 版本,system表示系统初始版本)

$ pyenv versions
 system
 2.6.7
* 3.6.4 (set by /Users/haohao/.pyenv/version)

切换 Python 版本(切换之后查看当前版本)

$ pyenv global 3.6.4
$ pyenv versions
 system
* 3.6.4 (set by /Users/haohao/.pyenv/version)
$ python -V
Python 3.6.4

卸载某个 Python 版本

pyenv uninstall 3.6.4

virtualenv 的安装及使用

1. 安装

sudo pip install virtualenv

2. 使用

下面我们使用 virtualenv 创建一个完全隔离的 Python 虚拟环境:

1.新建一个目录(一般用来用作工程路径)

$ mkdir myproject

2.进入目录创建一个完全独立干净的虚拟环境

如果 virtualenv 后面不加任何参数,那么默认创建的虚拟环境的 Python 版本是系统当前版本,如果要创建其他版本,可以使用 -p 参数指定其他版本的 python 可执行文件路径。可执行文件可以在上一步安装的 pyenv 的 ~/.pyenv/versions 路径找到,该路径是 pyenv 管理的所有 Python 版本路径。

# 使用系统当前的 Python 版本创建虚拟环境
$ virtualenv venv
New python executable in /Users/haohao/PycharmProjects/myproject/venv/bin/python
# 创建虚拟环境时指定 Python 版本
$ virtualenv -p ~/.pyenv/versions/2.6.7/bin/python venv
Running virtualenv with interpreter /Users/haohao/.pyenv/versions/2.6.7/bin/python
New python executable in /Users/haohao/PycharmProjects/myproject/venv/bin/python
Installing setuptools<37, pip, wheel<0.30...done.

3.激活创建的虚拟环境并使用

可以看出当前虚拟环境版本已经是 Python 2.6.7 了,而且所在路径确实是在上一步创建的虚拟环境路径。接下来使用 pip 安装的任何包都会安装在虚拟环境目录里面,不会安装在系统标准目录,从而保证当前环境是绝对干净的,对于系统是完全隔离的。

$ source venv/bin/activate
$ which python
/Users/haohao/PycharmProjects/myproject/venv/bin/python
$ python -V
Python 2.6.7

4.退出虚拟环境,回到系统版本

$ deactivate

以上这篇对Python 两大环境管理神器 pyenv 和 virtualenv详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单介绍Ruby中的CGI编程
Apr 10 Python
详细解读Python的web.py框架下的application.py模块
May 02 Python
python PIL模块与随机生成中文验证码
Feb 27 Python
Python中装饰器高级用法详解
Dec 25 Python
Python实现求解一元二次方程的方法示例
Jun 20 Python
Python3中bytes类型转换为str类型
Sep 27 Python
python中while和for的区别总结
Jun 28 Python
详解Django admin高级用法
Nov 06 Python
Pytorch 之修改Tensor部分值方式
Dec 27 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
Feb 28 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 #Python
利用python修改json文件的value方法
Dec 31 #Python
python 提取tuple类型值中json格式的key值方法
Dec 31 #Python
python 提取key 为中文的json 串方法
Dec 31 #Python
Python判断是否json是否包含一个key的方法
Dec 31 #Python
pyshp创建shp点文件的方法
Dec 31 #Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 #Python
You might like
简单的用PHP编写的导航条程序
2006/10/09 PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
php下检测字符串是否是utf8编码的代码
2008/06/28 PHP
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
PHP 批量删除 sql语句
2009/06/05 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
php插入排序法实现数组排序实例
2015/02/16 PHP
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
js单例模式的两种方案
2013/10/22 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
mpvue小程序循环动画开启暂停的实现方法
2019/05/15 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
Python的ORM框架SQLObject入门实例
2014/04/28 Python
Python中__init__.py文件的作用详解
2016/09/18 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
大学生实习证明范本
2014/01/15 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
安全生产承诺书范文
2014/05/22 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
安全承诺书
2015/01/19 职场文书
教师辞职书范文
2015/02/26 职场文书