对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 相关文章推荐
Python中针对函数处理的特殊方法
Mar 06 Python
深入理解Python中各种方法的运作原理
Jun 15 Python
Python中定时任务框架APScheduler的快速入门指南
Jul 06 Python
python学习之matplotlib绘制散点图实例
Dec 09 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
python使用matplotlib画饼状图
Sep 25 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
Python的pygame安装教程详解
Feb 10 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
Feb 20 Python
Python 绘制可视化折线图
Jul 22 Python
如何用python绘制雷达图
Apr 24 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
php5 mysql分页实例代码
2008/04/10 PHP
PHP stripos()函数及注意事项的分析
2013/06/08 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
passwordStrength 基于jquery的密码强度检测代码使用介绍
2011/10/08 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
JS获取并操作iframe中元素的方法
2013/03/21 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
JS实用的动画弹出层效果实例
2015/05/05 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
Seajs源码详解分析
2019/04/02 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
Python实现高效求解素数代码实例
2015/06/30 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
Python3爬虫使用Fidder实现APP爬取示例
2018/11/27 Python
Python读写文件基础知识点
2019/06/10 Python
24式加速你的Python(小结)
2019/06/13 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
一套软件开发工程师笔试题
2015/05/18 面试题
后勤人员岗位职责
2013/12/17 职场文书
寄语十八大感言
2014/02/07 职场文书
安全保证书怎么写
2015/02/28 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书