对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 相关文章推荐
在Django的模型和公用函数中使用惰性翻译对象
Jul 27 Python
Python算法应用实战之队列详解
Feb 04 Python
Python算法之求n个节点不同二叉树个数
Oct 27 Python
pygame游戏之旅 创建游戏窗口界面
Nov 20 Python
Python元组知识点总结
Feb 18 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
Python中asyncio模块的深入讲解
Jun 10 Python
Python和Anaconda和Pycharm安装教程图文详解
Feb 04 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
Apr 20 Python
Python flask路由间传递变量实例详解
Jun 03 Python
python属于软件吗
Jun 18 Python
python 实现倒计时功能(gui界面)
Nov 11 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 xml文件操作实现代码(二)
2009/03/20 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
PHP和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
JS DOM 操作实现代码
2010/08/01 Javascript
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
js操作浏览器的参数方法
2017/01/21 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
2018/05/09 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
详解Python中find()方法的使用
2015/05/18 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
python中scipy.stats产生随机数实例讲解
2021/02/19 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
电子商务专业个人的自我评价分享
2013/10/29 职场文书
五一服装活动方案
2014/01/11 职场文书
2014年秋季新学期寄语
2014/08/02 职场文书
作风转变年心得体会
2014/10/22 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
分享7个 Python 实战项目练习
2022/03/03 Python