Python 多版本共存最佳方案 pyenv & pyenv-virtualenv

对于 Python 开发者而言同时维护多个项目,项目之间依赖不互相影响是强需求。pyenv 可以帮助你在开发或者生产环境里安装并管理多个 Python 版本和虚拟环境。

部署

ubuntu

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sudo apt install -y git wget curl make build-essential libreadline-dev libsqlite3-dev libbz2-dev libssl-dev zlib1g-dev llvm xz-utils tk-dev
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

## 使用 pyenv update 来更新
git clone git://github.com/pyenv/pyenv-update.git $(pyenv root)/plugins/pyenv-update

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

mac

1
2
3
4
5
6
7
8
9
# 更新brew,安装pyenv pyenv-virtualenv
brew update && brew install pyenv pyenv-virtualenv
# 安装编译Python所需要的库
brew install readline xz zlib

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

zsh 的配置项

使用 zsh

1
2
3
4
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc

issue

pyenv 下载 Python 源码速度奇慢

pyenv install 命令会先去 Python 官网下载对应的版本包,然后编译安装。
因为网络缘故,在国内下载非常慢,有时候甚至被墙.

更改镜像源

修改一个全局变量

1
export PYTHON_BUILD_MIRROR_URL="http://pyenv.qiniudn.com/pythons/"

直接下载

把以前下载的 python 安装包(后缀是’tar.xz’)放在 $PYENV_ROOT/cache 下,可以跳过下载。

备用方案,但推荐还是直接 fq 吧

1
2
# 修改 3.5.2 为想安装的版本号
v=3.5.2|wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v

ISSUE 在 mojave 持续报错 zlib

zipimport.ZipImportError: can’t decompress data; zlib not available”

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

SOURCE

0%