Python系列(2)之pyenv进行多版本管理

转载自Lamborryan,作者:Ruan Chengfeng
本文链接地址:http://lamborryan.github.io/python-pyenv

1. 简介

使用Python的人一定会为各种Python的版本控制烦恼, 不过幸好有pyenv为我们提供了方便。Pyenv是python的版本管理工具,pyenv之于python相当于rvm之于ruby。

2. 配置安装

在Mac OS X下,我用homebrew安装pyenv:

brew update
brew install pyenv

要使改变马上生效,运行一下

$SHELL -l

至此,pyenv的配置也完成了。

来看看pyenv的几个命令

  1. pyenv install -l查看可以安装的版本;
  2. pyenv versions已经安装的python版本;
  3. pyenv version当前使用的版本;
  4. pyenv install <version>安装某一版本;
  5. pyenv rehash安装某一版本后需要使用该命令来刷新数据;
  6. pyenv global/local <version>运行global命令会切换全局的python版本;而local命令则会在当前目录下创建.python_version,管理当前目录及其子目录(子目录没有.python_version的情况下)的python版本。

比如我默认的启动python是2.7.2, 当我们使用pyenv global 3.5.1后现在指向了3.5.1

% pyenv versions  
  system * 3.5.1(set by /Users/rcf/.pyenv/version) 

但是当我运行python –version 却还显示的是2.7.2. 这是因为需要在.zshrc中添加一行配置(我用的是zsh)

if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi 

如此查看python版本已经正常

[2] % python --version
Python 3.5.1

以后需要切换版本只需要使用pyenv global/local <version>.

3. 使用中遇到的问题

3.1 在pycharm中设置

我们查看现在使用的python的路径

% which python
/Users/rcf/.pyenv/shims/python

但是pycharm默认使用的python却是/Library/Frameworks/Python.framework/Versions中的python.

所以需要在Files—>default setting-->Default project—>project interpreter中add local, /Users/rcf/.pyenv/shims/python.

3.2 #!/usr/bin/env与#!/usr/bin/python的区别

#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器; #!/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。 #!/usr/bin/python相当于写死了python路径; #!/usr/bin/env python会去环境设置寻找python目录,推荐这种写法。

使用了pyenv之后会, pyenv的python在/usr/bin/python前面了。

PATH=/Users/rcf/.pyenv/shims:/Users/rcf/Soft/maven/bin:/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin

所以以后再用#!/usr/bin/python就会出现版本不匹配了。建议使用#!/usr/bin/env python。 或者shell mv /usr/bin/python /usr/bin/python2.7.10 ln -s /usr/bin/python /Users/rcf/.pyenv/shims/python

本文完

个人资料
CodeYang
等级:6
文章:13篇
访问:1.1w
排名: 24
上一篇: 国内互联网知名团队博客汇总
下一篇: 白话经典算法系列之十 一道有趣的GOOGLE面试题
标签: pyenv、python、usr、bin、rcf、面试题
隐藏