对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实现Linux下守护进程的编写方法
Aug 22 Python
python根据京东商品url获取产品价格
Aug 09 Python
python解决汉字编码问题:Unicode Decode Error
Jan 19 Python
微信跳一跳python自动代码解读1.0
Jan 12 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
python监控键盘输入实例代码
Feb 09 Python
python3.5绘制随机漫步图
Aug 27 Python
Python列表(list)所有元素的同一操作解析
Aug 01 Python
基于SpringBoot构造器注入循环依赖及解决方式
Apr 26 Python
pycharm 添加解释器的方法步骤
Aug 31 Python
Python调用REST API接口的几种方式汇总
Oct 19 Python
python两种获取剪贴板内容的方法
Nov 06 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
第六节 访问属性和方法 [6]
2006/10/09 PHP
openPNE常用方法分享
2011/11/29 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
php实现设计模式中的单例模式详解
2014/10/11 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
JavaScript 动态创建VML的方法
2009/10/14 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
Vue Promise的axios请求封装详解
2018/08/13 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
PYTHON基础-时间日期处理小结
2018/05/05 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
Python如何实现动态数组
2019/11/02 Python
python argparser的具体使用
2019/11/10 Python
python科学计算之narray对象用法
2019/11/25 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
酒店中秋节活动方案
2014/01/31 职场文书
会计专业大学生职业生涯规划书
2014/02/11 职场文书
机关出纳岗位职责
2014/04/03 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
2014年化验室工作总结
2014/11/21 职场文书