对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的源码浅要剖析Python的内存管理
Apr 16 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
Jan 15 Python
用十张图详解TensorFlow数据读取机制(附代码)
Feb 06 Python
python skimage 连通性区域检测方法
Jun 21 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
Python使用MyQR制作专属动态彩色二维码功能
Jun 04 Python
django-filter和普通查询的例子
Aug 12 Python
Python K最近邻从原理到实现的方法
Aug 15 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
pytorch 查看cuda 版本方式
Jun 23 Python
Python实现哲学家就餐问题实例代码
Nov 09 Python
python munch库的使用解析
May 25 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删除数组中的特定元素的代码
2012/06/28 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
深入分析PHP引用(&amp;)
2014/09/04 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
使用jquery 简单实现下拉菜单
2015/01/14 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
jQuery 3.0 的 setter和getter 模式详解
2016/07/11 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
微信分享调用jssdk实例
2017/06/08 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
JavaScript常见继承模式实例小结
2019/01/11 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
Python里disconnect UDP套接字的方法
2015/04/23 Python
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
python如何保证输入键入数字的方法
2019/08/23 Python
python unichr函数知识点总结
2020/12/16 Python
开业庆典主持词
2014/03/21 职场文书
报告会主持词
2014/04/02 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
演讲稿开场白台词
2014/08/25 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
2015年采购部工作总结
2015/04/23 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
python中 .npy文件的读写操作实例
2022/04/14 Python