文档章节

Mac开发系列之python多版本和环境管理(pyenv和virtualenv安装配置使用)

潘少online
 潘少online
发布于 2015/12/16 20:50
字数 2656
阅读 522
收藏 0

系统版本:Mac OS X El Capitan(10.11)

预先安装:homebrew 安装方法:运行ruby脚本 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

pyenv依赖:python 2.5+ , git

pyenv安装:

推荐使用pyenv-installer这个插件安装pyenv,这种方式安装会多安装几个是实用的插件,比如:

pyenv-virtualenv 用于整合virtualenv

pyenv-pip-rehash 用于使用pip安装包之后自动执行rehash

pyenv-update 用于升级pyenv

使用python-installer方式安装:确保你的电脑可以访问Github,然后在终端运行:

curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

即可自动安装pyenv,安装完成后,根据终端的pyenv默认安装地址是~/.pyenv但是如果你的系统的环境变量中存在PYENV_ROOT则会被安装到PYENV_ROOT目录下(当使用homebrew等其他工具安装后)信息,在你电脑使用的对应的shell的配置文件中添加环境变量(如使用的shell是bash则在~/.bashrc中添加,若是zsh则在~/.zshrc中添加,etc):

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

至此,完成pyenv的安装和基本配置。

ps:pyenv默认安装地址是~/.pyenv,但是如果你的系统的环境变量中存在PYENV_ROOT则会被安装到PYENV_ROOT目录下(当使用homebrew等其他工具安装后)

pyenv工作原理:

系统运行python的时候会检测环境变量PATH, 如

/usr/local/bin:/usr/bin:/bin

检测/usr/local/bin是否存在python, 如果不存在则继续搜索/usr/bin,以及类推 pyenv的工作原理是在PATH中添加shims目录

~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin

卸载pyenv:

pyenv的卸载比较简单,只需要删除对应的目录即可,默认目录是~/.pyenv。

pyenv使用:

查看可安装的包:

$ pyenv install -l

查看已安装的python:

versions和version命令

versions命令列出你已经安装的Python版本以及当前使用的版本

pyenv versions

如下图:

version命令打印你当前使用版本。version命令的输出类似versions命令,但是它只包含了当前版本那一行,并且没有前导的*。

版本名称system代表系统预装Python。

安装2.7.11:

$ pyenv install 2.7.11

$ pyenv rehash (这一步是更新pyenv中的python版本数据,每次安装新的python版本后需执行此命令。)

安装指定版本的python只需使用pyenv install 版本号即可。

卸载python版本:

使用pyenv uninstall 版本号

pyenv rehash


切换当前目录的python版本:

切换和使用指定的版本Python版本有3种方法:

global和local命令:

global命令和local命令都是用来切换当前Python版本的命令。不同之处在于,global的切换是全局的,而local的切换是局部的。

pyenv local 2.7.11

以上命令:会在当前目录下创建一个.pyenv-version文件,文件内容为2.7.11,pyenv通过这种形式,标记当前目录使用Python-2.7.11。如果其子目录下面没有.pyenv-version文件,那么此版本讲继承到子目录。

pyenv global 2.7.11

以上命令:会修改$PYENV_HOME/version文件的内容,标记全局Python版本,如何理解全局Python版本,可以认为全局版本是一个默认值,当一个目录及其父目录下面都没有.python-version文件的时候,会使用全局版本。


一般的,我们不修改全局版本,而使用期默认值system,因为在unix系统上,很多系统工具依赖于Python,如果我们修改了Python的版本,会造成绝大多数的依赖Python的系统工具无法使用,如果你不小心修改了,也不要紧张,使用global命令修改回来就可以了,有时候,你发现部分系统工具无法使用,你也可以看看你当前的Python版本。

系统全局用系统默认的Python比较好,不建议直接对其操作

pyenv global system


用local进行指定版本切换,一般开发环境使用。

pyenv local 2.7.11


对当前用户的临时设定Python版本,退出后失效

pyenv shell 3.5.1

取消某版本切换

pyenv local 3.5.1 --unset


优先级关系:shell——local——global


利用virtualenv和Virtaulenvwrapper管理虚拟Python环境

virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:

1.在没有权限的情况下安装新套件

2.不同应用可以使用不同的套件版本

3.套件升级不影响其他应用


Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:

1.将所有虚拟环境整合在一个目录下

2.管理(新增,删除,复制)虚拟环境

3.切换虚拟环境


1、安装和使用方法

#安装

pip install virtualenv

pip install virtualenvwrapper

#创建虚拟环境

mkvirtualenv [虚拟环境名称]

此时还不能使用virtualenvwrapper,默认virtualenvwrapper安装在/usr/local/bin下面,实际上你需要运行virtualenvwrapper.sh文件才行,先别急,打开这个文件看看,里面有安装步骤,我们照着操作把环境设置好。

如果你使用的bash或者zsh

#创建目录用来存放虚拟环境

mkdir $HOME/.virtualenvs

#在. bash_profile 或者 .zshrc 追加两行

export WORKON_HOME=$HOME/.virtualenvs

source /usr/local/bin/virtualenvwrapper.sh

运行: 

source ~/.bashrc

source ~/.zshrc

此时virtualenvwrapper就可以使用了。


2、创建虚拟环境例如:

#在当前的环境的Python版本下创建名称为py3dev的虚拟环境。

mkvirtualenv py3dev


默认情况下,虚拟环境会依赖系统环境中的site packages,就是说系统中已经安装好的第三方package也会安装在虚拟环境中,如果不想依赖这些package,那么可以加上参数 –no-site-packages建立虚拟环境

例如:

mkvirtualenv --no-site-packages [虚拟环境名称]

mkvirtualenv --no-site-packages py3dev


3、查看创建的虚拟环境:

λ ~/ lsvirtualenv

py2dev

======

py3dev

======

λ ~/ workon

py2dev

py3dev

4、启动某虚拟环境:

works [虚拟环境名称]

workon py3dev


5、删除某个虚拟环境:


rmvirtualenv [虚拟环境名称]

rmvirtualenv py3dev


6、删除某个虚拟环境需要先退出这个环境:

deactivate


融合 pyenv、virtualenv、Virtaulenvwrapper 管理Python版本和虚拟环境

如何对Python2.7.11和Python3.5.1版本分别创建虚拟环境?

有这三个工具其实非常简单,主要是确保环境切换成功后在创建虚拟环境。

#确保切换成功,我建议 source .zshrc 一下在切换(如果是使用pyenv-installer安装的,则不需要,若是直接安装的pyenv则需要,具体原因仍不清楚。)

#安装全新的Python2.7.11版本
pyenv install 2.7.11
pyenv rehash

#切换到刚安装的这个版本
pyenv local 2.7.11
#确保切换成功
source .zshrc
#验证一下版本,pip发现里面包很少
pip list
#验证版本
python -V
#务必在这个新的2.7.11中安装
pip install virtualenv
pip install virtualenvwrapper
#务必
source .zshrc
#创建2.7.11的开发环境
mkvirtualenv py2dev
#创建完某版本的开发环境后务必退出,当前虚拟环境,不然就是虚拟环境中在创建了。
deactivate
#退出2.7.11环境
pyenv local --unset 2.7.11
source .zshrc

3.5.1的虚拟环境创建也是一样,因此验证2.7.11和3.5.1的虚拟环境

(py3dev) ~  deactivate
~  workon py2dev
(py2dev)~  python -V
Python 2.7.11
(py2dev)~  deactivate
~  workon py3dev
(py3dev)~  python -V
Python 3.5.1
(py3dev)~  deactivate
~

#愉快无痛升级,一键升级所有PIP包

pip list --outdated | grep '^[a-z]* (' | cut -d " " -f 1 | xargs pip install -U


pyenv与virtualenv

pyenv通过插件,可以很好的和virtualenv一起工作,通过整合virtualenv,pyenv实现了真正意义上的环境隔离,每个项目都相当于使用一个单独的解释器。


通过pyenv-installer安装的pyenv,已经安装好virtualenv插件了,如果不是通过pyenv-installer安装的pyenv,你可能需要自己安装virtualenv插件,安装方法也很简单:


cd $PYENV_ROOT/plugins

git clone https://github.com/yyuu/pyenv-virtualenv.git

直接把插件clone下来就安装完成了。


安装完成之后,我们可以通过virtualenv命令即可创建虚拟环境,virtualenv的一般用法如下:


pyenv virtualenv [-f|--force] [-u|--upgrade] [VIRTUALENV_OPTIONS] <version> <virtualenv-name>

选项-f表示强制的,也就是如果已经存在这个虚拟环境,那么将会覆盖这个虚拟环境 选项-u表示upgrade,用于修改已经存在的虚拟环境的Python版本 VIRTUALENV_OPTIONS 是传递给virtualenv的选项,可以通过virtualenv的帮助获取选项的含义 version 表示Python版本 virtualenv-name 是我们给虚拟环境指定的名字


例如:

pyenv virtualenv 2.7.11 my_project

以上命令就创建了一个基于Python-2.7.11,名为my_project的虚拟环境。创建好的虚拟环境犹如一个单独Python版本一样,我们可以通过local或者global命令切换过去。

由于每个解释器间是完全隔离的,所以强烈建议你的每个项目,都放置在单独的虚拟环境中。

virtualenv插件还提供了virtualenvs命令,用于列出所有已经创建的虚拟环境,

pyenv virtualenvs

以上命令列出我们所有已经创建的虚拟环境,已经虚拟环境基于那个Python版本。

当我们的一个项目生命周期结束的时候,我们或许会想要删除虚拟环境以释放我们的硬盘空间,删除虚拟环境非常简单,直接用uninstall命令像删除正常的Python版本一样就可以了。

事实上,虚拟环境一旦创建,你就可以把他当成一个独立的版本来使用和维护了。


使用下面的命令

# 创建一个基于`python 2.7.10`版本的名字叫做`env27`的虚拟环境, 使用`--no-site-packages`参数来隔离系统的site-packages
$ pyenv virtualenv 2.7.10 env27 --no-site-packages
# 指定目录使用evn27的虚拟环境
$ cd code
$ pyenv local env27
# 取消设定
$ pyenv local env27 --unset
# 删除
$ pyenv uninstall env27


© 著作权归作者所有

潘少online
粉丝 12
博文 58
码字总数 107019
作品 2
深圳
程序员
私信 提问
jupyter、pyenv、virtualenv、virtualenvwrapper简要区别

一、区别 1.jupyter 对接ipython,作为一个web端的notebook,便于python工作。 2.pyenv 在创建一个新的python版本时,完全拷贝一个现成的python环境。新的python版本,可作为global 3.virtua...

xiaoge2016
2018/08/10
0
0
pyenv 让 python 版本完美切换

前言 我觉得如果使用 python 开发的话,还是在 unix/linux 的环境下吧,shell 工具的效率比 windows 高得多,尽管 windows 下也有 cmder 这种神器,而且现在 windows store 也很好的开发出了...

JoiT
2018/08/27
0
0
django开发环境部署(二)——python版本控制器pyenv

python版本控制器pyenv 之前的那篇是说明了django环境的site package完全独立出来了,但是使用的python解释器还是系统的,为了继续独立出来,甚至是达到ruby的rvm的自由切换解释器版本,那样...

异类深呼吸
2014/04/24
0
0
Linux 下的 Python 多版本管理(pyenv)

简介 提到 Python 环境管理,更多人可能会首先想到 virtualenv。但与用于创建独立包环境的 virtualenv 不同,pyenv 的作用仅限于维护不同版本的 Python。它的使用不依赖于 Python,是一个简单...

lionets
2014/05/21
0
3
python项目环境搭建(pyenv+virtualenv)

python项目环境搭建(pyenv+virtualenv) 参考博客 在centos上操作 1、先安装curl 和 git # yum install curl git-core 2、接下来安装pyenv # curl -L https://raw.github.com/yyuu/pyenv-i......

zoulala
2018/09/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

对集合的理解

开端 同事小G提了一点,Set都是无序的,但是我之前有看到过treeSet是有序的,就和他讨论了起来,还百度了一下,有序。然而他只是淡淡的说自己敲代码验证一下。 TreeSet 循环int类型 1~20,毫...

无极之岚
30分钟前
0
0
Kernel字符设备驱动框架

Linux设备分为三大类:字符设备,块设备和网络设备,这三种设备基于不同的设备框架。相较于块设备和网络设备,字符设备在kernel中是最简单的,也是唯一没有基于设备基础框架(device结构)的...

yepanl
34分钟前
0
0
Ajax

定义 Ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术,用于创建动态网页 Ajax=Asynchronous Javascript And XML(异步的JavaScript和XML) 原理 XMLHttpRequest对象(异...

星闪海洋
昨天
2
0
Jenkins 中文本地化的重大进展

本文首发于:Jenkins 中文社区 我从2017年开始,参与 Jenkins 社区贡献。作为一名新成员,翻译可能是帮助社区项目最简单的方法。 本地化的优化通常是较小的改动,你无需了解项目完整的上下文...

Jenkins中文社区
昨天
3
0
Spring中如何使用设计模式

关于设计模式,如果使用得当,将会使我们的代码更加简洁,并且更具扩展性。本文主要讲解Spring中如何使用策略模式,工厂方法模式以及Builder模式。 1. 策略模式 关于策略模式的使用方式,在S...

爱宝贝丶
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部