对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 相关文章推荐
Python3中多线程编程的队列运作示例
Apr 16 Python
Django框架中的对象列表视图使用示例
Jul 21 Python
使用Python读写及压缩和解压缩文件的示例
Jul 08 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
Python基于whois模块简单识别网站域名及所有者的方法
Apr 23 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
Apr 30 Python
对Python中for复合语句的使用示例讲解
Nov 01 Python
Python获取网段内ping通IP的方法
Jan 31 Python
深入学习python多线程与GIL
Aug 26 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 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 VS ASP
2006/10/09 PHP
php auth_http类库进行身份效验
2009/03/19 PHP
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
PHP实现今天是星期几的几种写法
2013/09/26 PHP
jquery $.each() 使用小探
2013/08/23 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
jQuery 3.0 的 setter和getter 模式详解
2016/07/11 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
使用python实现strcmp函数功能示例
2014/03/25 Python
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
浅谈flask源码之请求过程
2018/07/26 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
女性时尚在线:IVRose
2019/02/23 全球购物
洲际酒店集团英国官网:IHG英国
2019/07/10 全球购物
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
介绍一下write命令
2012/09/24 面试题
领导证婚人证婚词
2014/01/13 职场文书
优秀团队获奖感言
2014/02/19 职场文书
关于读书的演讲稿
2014/05/07 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
Linux中文件的基本属性介绍
2022/06/01 Servers