对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的几条建议分享
Feb 10 Python
在Python的Django框架中用流响应生成CSV文件的教程
May 02 Python
Python 基础知识之字符串处理
Jan 06 Python
Android分包MultiDex策略详解
Oct 30 Python
Python实现最大子序和的方法示例
Jul 05 Python
HTML的form表单和django的form表单
Jul 25 Python
Python 3.8 新功能全解
Jul 25 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
Django框架 信号调度原理解析
Sep 04 Python
python对数组进行排序,并输出排序后对应的索引值方式
Feb 28 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 Python
python本地文件服务器实例教程
May 02 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
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
PHP Array交叉表实现代码
2010/08/05 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
在JavaScript中获取请求的URL参数[正则]
2010/12/25 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
Python 除法小技巧
2008/09/06 Python
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
结束运行python的方法
2020/06/16 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
大专毕业生简历的自我评价
2013/10/20 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
贷款担保书范文
2014/05/13 职场文书
经典演讲稿开场白
2014/08/25 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
监守自盗观后感
2015/06/10 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
用python实现监控视频人数统计
2021/05/21 Python
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers