0%

pyenv使用笔记

OSX上的python版本纷繁复杂。

  • 有系统自带的: /System/Library/Frameworks/Python.framework/Versions/
  • 有后来安装的: /Library/Frameworks/Python.framework/Versions/

经常搞不清楚用的是哪里的python。遇到要升级python版本,又提心吊胆的怕把系统的那个给搞挂了。于是,便试着用pyenv来管理版本

关于Pyenv

pyenv是Python版本管理工具,能够使你轻松的在多个python版本之间进行切换

常用命令

使用pyenv commands可以查看所有命令或者通过pyenv -h来查看常用命令

版本管理

查看已安装的python版本

1
2
3
$ pyenv versions
* system (set by /Users/xxx/.pyenv/version)
3.7.0

查看可以安装的版本

1
2
3
4
5
6
$ pyenv install -l
Available versions:
2.1.3
2.2.3
...
stackless-3.5.4

可以看到,可安装的版本有python2, python3, activepython, anaconda, ironpython, jython, pypy, stackless, etc.

安装指定版本

1
2
3
4
5
6
$ pyenv install 2.7.15
python-build: use openssl from homebrew
python-build: use readline from homebrew
Installing Python-2.7.15...
python-build: use readline from homebrew
Installed Python-2.7.15 to /Users/xxx/.pyenv/versions/2.7.15

:Mac上安装可能会遇到The Python zlib extension was not compiled. Missing the zlib?的错误,可以尝试CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 2.7.15

更多错误,可查看项目的wiki中的常见问题

安装完毕一个python版本后,需要执行pyenv rehash来更新后,才能看到已安装的版本

优先级

可以为当前目录、当前shell以及全局进行不同的python版本定义

遵循shell>local>global的优先级顺序

设置版本

1
2
$ pyenv global 2.7.15 #设置全局版本,版本信息记录在~/.pyenv/version
$ pyenv local 3.7.0 #设置当前目录的python版本,将在当前目录生成.python-version文件
  • 当需要为一个目录设置特定的python版本时,可以先进入该目录下执行pyenv local xxx
  • 当需要为该目录下的一个子目录设置特定的python版本,可进入该子目录设置local
  • 设置完毕后,会在响应的目录下生成.python-version的文件
  • 使用时,将从当前目录开始查找,如果不存在.python-version文件,则向上一级查找,直到根目录为止
  • 如果到跟目录任然没有查找到,则使用global的设置
1
2
3
4
$ pyenv shell 3.6.0 #为当前shell设置python版本,将通过环境变量的方式设置
$ env | grep PYENV_VERSION
PYENV_VERSION=2.7.15
$ pyenv shell --unset #

virtualenv

默认情况下,安装pyenv后会安装pyenv-virtualenv的插件,可以通过pyenv virtualenv创建虚拟环境

查看已有的virtualenv

1
2
3
$ pyenv virtualenvs
3.7.0/envs/common3 (created from /Users/abc/.pyenv/versions/3.7.0)
common3 (created from /Users/abc/.pyenv/versions/3.7.0)

创建virtualenv

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ pyenv virtualenv 2.7.15 my2.7.15
Collecting virtualenv
Downloading https://files.pythonhosted.org/packages/8f/f1/c0b069ca6cb44f9681715232e6d3d65c75866dd231c5e4a88e80a46634bb/virtualenv-16.3.0-py2.py3-none-any.whl (2.0MB)
100% |████████████████████████████████| 2.0MB 117kB/s
Requirement already satisfied: setuptools>=18.0.0 in ./.pyenv/versions/2.7.15/lib/python2.7/site-packages (from virtualenv) (39.0.1)
Installing collected packages: virtualenv
Successfully installed virtualenv-16.3.0
New python executable in /Users/abc/.pyenv/versions/2.7.15/envs/my2.7.15/bin/python2.7
Also creating executable in /Users/abc/.pyenv/versions/2.7.15/envs/my2.7.15/bin/python
Installing setuptools, pip, wheel...
done.
Requirement already satisfied: setuptools in /Users/abc/.pyenv/versions/2.7.15/envs/my2.7.15/lib/python2.7/site-packages
Requirement already satisfied: pip in /Users/abc/.pyenv/versions/2.7.15/envs/my2.7.15/lib/python2.7/site-packages

$ pyenv virtualenvs
2.7.15/envs/my2.7.15 (created from /Users/abc/.pyenv/versions/2.7.15)
3.7.0/envs/common3 (created from /Users/abc/.pyenv/versions/3.7.0)
common3 (created from /Users/abc/.pyenv/versions/3.7.0)
my2.7.15 (created from /Users/abc/.pyenv/versions/2.7.15)

active & deactive

1
2
3
$ pyenv activate my2.7.15
(my2.7.15) $
(my2.7.15) $ pyenv deactivate

删除virtualenv

1
2
$ pyenv uninstall my2.7.15
pyenv-virtualenv: remove /Users/abc/.pyenv/versions/2.7.15/envs/my2.7.15? Y

Have Fun 😄