Python 版本控制神器

以下内容均转自我的博客 YuanBLQ

由于 python 拥有众多的版本,以及不同模块也有不同的版本。如果每个版本之间相互都不兼容那也就无所谓什么版本控制了,可是同一机器上各个版本的 python 可以相互兼容并存,而且同一模块不同版本有时需要的 python 版本是不相同的,所以 python 的版本控制显得尤为重要。

pyenv 是个 shell 脚本,能够轻松得实现各个不同版本 python 的相互间切换,而且各个版本的 python 切换不限于全局切换,甚至不同文件夹都可以拥有不同的 python 版本。

下面我们就来看看如何使用 pyenv

管理 python 版本

如果你既需要使用 python2,也需要使用 python3pyenv 将是一个很高效的 python 版本管理工具。

由于 pyenv 是脚本插件,所以只能在类 UNIX 系统上使用。所以,如果你想在 windows 上安装,那就点击左上角去隔壁 virtualenv 瞧瞧。

安装 pyenv(Ubuntu)

  1. 确定你想把 pyenv 安装在哪。推荐安装在 $HOME/.pyenv,但你也可以安装在任意位置。
    $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    
  2. 定义你 PYENV_ROOT 的环境变量来指定你把 pyenv 仓库克隆到了哪,并把 $PYENV_ROOT/bin 添加到你的 $PATH 中,这样就能在命令行使用 pyenv 命令。
    $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
    $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
    
  3. 设置启动 shell 时自动加载 pyenv 脚本。在 shell 配置文件的最后面加上 eval "$(pyenv init -)"
    $ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
    
  4. 重启 shell,使脚本生效。
    $ exec $SHELL
    
  5. 安装不同的 python 版本到 $(pyenv root)/versions 文件夹。
    pyenv 安装之前的所有 python 版本都归为 system 版本。 (可以用 pyenv versions 查看当前安装的 python 版本)
    在安装 python 之前,可以使用 pyenv install -l 查看当前可以安装哪些 python 版本。
    然后使用 pyenv install 选择的版本 来安装你所选择的 python 版本。比如 pyenv install 3.6.1 安装 python 官网的版本。

使用 git 更新 pyenv

如果你是按照上面的方法安装的 pyenv,那你可以使用 git 来更新。

更新为最新的开发版

$ cd $(pyenv root)
$ git pull

更新为指定的版本

$ cd $(pyenv root)
$ git fetch
$ git tag
v0.1.0
$ git checkout v0.1.0

pyenv 的基本操作命令

  • pyenv versions 查看当前已安装的 python 版本
  • pyenv install ... 安装指定版本的 python
  • pyenv global python版本 切换全局 python 版本
  • pyenv local python版本 切换当前文件夹下的 python 版本
  • pyenv shell python版本 切换当前 shell 中的 python 版本
  • pyenv version 查看当前使用的 python 版本

卸载 pyenv

  • 如果你只是想禁用 pyenv,那么把 pyenv init 从 shell 的配置文件中移除,然后重启 shell 就行了(移除后 pyenv 命令仍然能使用,但是版本切换命令不会生效)。
  • 完整卸载 pyenv。执行上一步,然后把 pyenv 的根目录删除即可全部删除 pyenv(通过 pyenv install ... 安装的 python 版本都会删除)。
    rm -rf $(pyenv root)
    

卸载 pyenv 安装的 python 版本

  • 使用 pyenv uninstall ... 命令。
  • 直接删除 versions 文件夹下的对应 python 版本文件夹。

pyenv 其他操作命令

参见 commands.md




管理 python 模块版本

使用 virtualenvvirtualenvwrapper 管理 python 虚拟环境,每次都需要手动激活或退出。对于懒癌晚期患者,pyenv-virtual 的自动激活和退出虚拟环境功能简直不能再赞。另外搭配 pyenv 食用效果更佳。

安装 pyenv-virtualenv(Ubuntu)

由于 pyenv-virtualenvpyenv 的一个插件,所以安装之前需要先安装 pyenv

注意:如果 pyenv 的安装目录不是 $HOME/.pyenv 需要确保克隆下来的仓库位于你所安装的 pyenv 目录下的 plugin 文件夹下。

接下来就可以执行安装步骤了:

  1. 克隆 pyenv-virtual 仓库到 plugin 文件夹下。
  2. (可选/重点)添加 pyenv virtualenv-init 到你的 shell 配置文件中,这样进入指定文件夹自动进入虚拟环境,离开文件夹退出虚拟环境。
    $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
    
  3. 重启 shell。

创建 pyenv-virtualenv 虚拟环境

  • pyenv virtualenv 指定python版本 虚拟环境名字
  • pyenv virtualenv 虚拟环境名字

如果不指定 python 版本,则默认使用当前 pyenv version 的 python 版本。

创建的虚拟环境位于 $(pyenv root)/versions/ 下的指定 python 版本的文件夹中 envs/ 文件夹下。

激活虚拟环境

  • 自动激活/退出
  • 手动激活/退出

自动激活环境:

  • .bashrc 文件的最后添加 eval "$(pyenv virtualenv-init -)",然后在 shell 中输入 exec "$SHELL" 重启 shell,或者手动重启 shell。
  • 在想要激活虚拟环境的文件夹中新建 .python-version 文件,并写入虚拟环境的名字(pyenv local python版本 该命令也是通过创建该文件来达到进入该文件夹后自动使用指定 python 版本的目的)。
  • 以后进入该的文件夹就会自动激活虚拟环境,离开该文件夹就会退出虚拟环境。

手动激活环境:

  • pyenv activate 虚拟环境名字 激活虚拟环境。
  • pyenv deactivate 退出虚拟环境。

删除虚拟环境

有 2 种方法:

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

推荐阅读更多精彩内容