Pyenv基础教程

pyenv 是一个python版本管理软件。受到ruby的同类软件 rbenvruby-build的启发。

安装 pyenv

MacOS

使用homebrew安装

1
2
brew update
brew install pyenv

Linux

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

配置

.bashrc中添加下列内容:

1
2
3
4
export PYENV_ROOT="$home/.pyenv"
export PATH="$PYENV_ROOT/bin:$path"
# 上面两行不需要,如果采用homebrew安装方式
eval "$(pyenv init -)"

依赖环境

pyenv可以用于安装多个python版本,并对其进行管理。为了避免出现可能的错误,安装之前需要准备好依赖环境。

  • macos

    1
    brew install openssl readline sqlite xz zlib

    如果运行 Mojave 或更高版本,还需额外安装

    1
    sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

  • Debian/Ubuntu

    1
    apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev

    在服务器上import pandas as pd可能会出现lzma module could not found, your python was incomplete这样的错误。解决办法是安装库liblzma-dev

    1
    apt install liblzma-dev

安装python

pyenv install命令用于安装指定python版本。

为了添加framework支持,安装代码应如下

1
2
3
4
# MacOS
env python_configure_opts="--enable-framework" pyenv install 3.6.6
# Linux
env python_configure_opts="--enable-shared" pyenv install 3.6.6

若提示错误no module named pyexpat,则用如下方式安装

1
SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk MACOSX_DEPLOYMENT_TARGET=10.14 pyenv install 2.7.16

参考命令

查看已安装python版本

1
2
3
4
5
pyenv versions

system
* 2.7.15 (set by /users/xuwutao/.python-version)
3.6.6

版本切换

pyenv总共设置了三个命令用于python的版本控制,按优先级由高到低以此为

  1. pyenv shell
  2. pyenv local
  3. pyenv global

pyenv shell

效果等价于设定环境变量pyenv_version

1
2
3
4
pyenv shell 3.6.6

# unset
pyenv shell --unset

pyenv local

在当前目录下新建文件.python-version,记录python版本号,一行一个。如果当前目录下没有该文件,则一路往上寻找直到系统根目录。

1
2
3
pyenv local 2.7.15
# 等价于
touch .python-version && echo '2.7.15' > !$

pyenv global

pyenv global对应的文件为$(pyenv root)/version

1
2
3
pyenv global 2.7.10
# 等价于
touch ~/.pyenv/version && echo '2.7.10' > !$

有一个特殊的版本名system是指pyenv之外的pythonmacos自带,homebrew安装版本等)。

三个命令都可以后接多个版本号。