Pyenv管理Python多版本环境

本文地址:https://www.jianshu.com/p/ab3b3811d32b

一、简介

在配置Python环境的时候,我们常常会遇到环境冲突的问题,特别是在多个Python版本的时候。例如Linux系统基本都会自带一个Python2.7,这个Python是Linux本身需要使用的,所以我们一般不会去使用这个Python,而是自己安装一个,这个时候就常常遇到冲突的问题。

当然,如果熟悉Python的配置的话,是不会遇到这个问题的,但如果需要配置多个Python版本,且之间不互相影响的话,还是非常的麻烦。

所幸现在有几个比较完善的工具,可以帮助我们非常方便的一条龙搭建Python环境,本篇文章讲解的则是如何使用 Pyenv 来搭建Python环境,这是作者目前非常喜欢使用的一种方式。Pyenv 是一个Python版本管理工具,可以让你轻松的安装多个版本的Python,并且在Python的各个版本之间简单快速的切换,非常简单实用。


二、安装配置

2.1. Linux安装Pyenv

在安装Pyenv之前,我们需要先把Python的依赖项装好,如下所示:

sudo apt-get install gcc libbz2-dev libncurses5-dev  libgdbm-dev liblzma-dev libsqlite3-dev libssl-dev libreadline6-dev

然后就可以使用GIT从Github上下载下载Pyenv的源码了,Pyenv不需要编译等操作,下载下来之后放到某一个位置即可,如下所示:

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

在这里是把Pyenv下载下来后,放到了 ~ 家目录下,起名为 .pyenv 的隐藏目录中。这只是一个官方比较推荐的位置,实际上你可以自行选择把你的 .pyenv 目录放到任何位置。

在下载完毕之后,还需要配置一下Pyenv的环境变量以及Pyenv启动的语句:

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc

如果你是使用的 zsh,那么需要把 ~/.bashrc 修改为 ~/.zshenv,按照系统的不同,可能还需要修改为 ~/.bash_profile

如果你修改了 .pyenv 的位置,那么你还要将上面命令中的对应路径进行修改。

配置完毕之后重启 shell 即可生效:

exec "$SHELL"

2.2. Mac安装Pyenv

如果你是使用的Mac系统,那么官方推荐的安装方式是使用Homebrew来进行安装,Homebrew的使用方式请自行搜索。

使用Homebrew安装非常的简单,一行代码即可,Homebrew会自动下载依赖项:

brew install pyenv

安装完毕之后会有提示你将pyenv init添加到Shell中,输入以下命令即可:

$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

之后重启终端就可以使用了。

:如果使用的是Mac os最近的10.14版本,那么使用 Pyenv 安装Python时,可能会遇到 zlib 的报错,这种情况使用Homebrew把 zli�b 安装好,并根据安装好之后的提示,将其添加到编译环境中即可。


三、使用方式

配置完毕之后,就可以在命令行中使用 Pyenv 命令了,加上 -h 参数可以查看帮助和使用方式:

$ pyenv -h
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   commands    List all available pyenv commands
   local       Set or show the local application-specific Python version
   global      Set or show the global Python version
   shell       Set or show the shell-specific Python version
   install     Install a Python version using python-build
   uninstall   Uninstall a specific Python version
   rehash      Rehash pyenv shims (run this after installing executables)
   version     Show the current Python version and its origin
   versions    List all Python versions available to pyenv
   which       Display the full path to an executable
   whence      List all Python versions that contain the given executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme

在这里我们讲解一下比较常用的一些命令的使用方式。

3.1. 查看和安装Python

需要注意的一点是,Pyenv 仅能够管理由 Pyenv 自己安装的Python,也就是说如果你使用编译或其他方式安装的Python版本,将不会纳入 Pyenv 的管理。

首先,我们来查看使用 Pyenv 能安装什么版本的Python:

$ pyenv install --list

使用此命令即可查看 Pyenv 能安装的所有版本,包括官方的Python、anacondapypy等。在这里,只有数字的,如 3.6.6 这种就是官方版本的Python。

选择好你要安装的Python版本之后,使用以下命令即可安装:

$ pyenv install 3.6.6

版本名字需要和上一条命令中查询到的一致。

依赖项这些都没有问题的话,一般输入命令等待安装成功即可,安装完成后,我们可以使用以下命令来查看纳入 Pyenv 安装的有哪些版本:

$ pyenv versions
* system (set by /Users/wnanbei/.pyenv/version)
  3.6.6
  3.7.1

这里的 system 则是系统本身的Python环境,而下方的 3.6.63.7.1 则是使用 Pyenv 安装的,带 * 的则是当前正在使用的Python环境。


3.2. 切换Python环境

安装了多个Python版本之后,使用 Pyenv 可以非常快速便捷的在多个Python版本中切换,而不会造成冲突。其设定Python环境的方式也有几种。

  1. 全局Python环境

    指定全局的Python环境一般用的比较少,如果你嫌每次都要用命令进入环境比较麻烦的话,那么你可以指定一个比较常用的Python版本作为全局的Python环境:

    $ pyenv global 3.6.6
    
  2. 局部Python环境

    除了全局环境之外,还可以给某个目录指定环境,也就是说,只要进入这个指定之后的目录,那么其所处的环境就是指定的Python版本了。

    指定之前,首先要使用 cd 命令进入要指定的目录,然后输入以下命令。

    $ pyenv local 3.6.6
    

    如果要取消某个目录的Python环境,可以使用以下命令:

    $ pyenv local --unset
    
  3. 临时Python环境

    所谓的临时Python环境,与上面的全局和局部环境不同,只是当前有效,退出Shell之后,下次再进入还需要重新切换。输入以下命令进入临时Python环境:

    $ pyenv shell 3.6.6
    

    如果需要退出临时环境的话,使用以下命令:

    $ pyenv shell --unset
    

这三种Python环境的优先级为:shell > local > global

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 175,490评论 5 419
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 74,060评论 2 335
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 124,407评论 0 291
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 47,741评论 0 248
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 56,543评论 3 329
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 43,040评论 1 246
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 34,107评论 3 358
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 32,646评论 0 229
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 36,694评论 1 271
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 32,398评论 2 279
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 33,987评论 1 288
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 30,097评论 3 285
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 35,298评论 3 282
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 27,278评论 0 14
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 28,413评论 1 232
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 38,397评论 2 309
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 38,099评论 2 314

推荐阅读更多精彩内容