对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 深入理解yield
Sep 06 Python
举例讲解Python中的死锁、可重入锁和互斥锁
Nov 05 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
May 25 Python
对python requests发送json格式数据的实例详解
Dec 19 Python
Python list列表中删除多个重复元素操作示例
Feb 27 Python
Python实现京东秒杀功能代码
May 16 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
Feb 11 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
Python flask框架端口失效解决方案
Jun 04 Python
如何让python的运行速度得到提升
Jul 08 Python
python如何设置静态变量
Sep 07 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获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
学习php过程中的一些注意点的总结
2013/10/25 PHP
PHP中浮点数计算比较及取整不准确的解决方法
2015/01/09 PHP
PHP单例模式详细介绍
2015/07/01 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
Jquery Change与bind事件代码
2011/09/29 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
对类Vue的MVVM前端库的实现代码
2018/09/07 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
Python算术运算符实例详解
2017/05/31 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
python输出pdf文档的实例
2020/02/13 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
教育学专业实习生的自我鉴定
2013/11/26 职场文书
银行学习十八大感想
2014/01/11 职场文书
网络编辑职责
2014/03/01 职场文书
给公司的建议书范文
2014/05/13 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis