Pyenv通用安装设置及常见问题

00:文章简介

记录pyenv的环境安装及遇到的各种问题的解决办法。

01:Linux系统安装

1.1:开启xxx获得proxy

1
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

1.2:使用一键安装脚本

1
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

1.3:设置pyenv环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
# bash shell
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

# zsh shell
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zprofile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zprofile
echo 'eval "$(pyenv init --path)"' >> ~/.zprofile
echo 'eval "$(pyenv init -)"' >> ~/.zprofile
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zprofile

1.4:安装cpython版本

1
pyenv install 3.8.8

1.5:设置env python

1
pyenv virtualenv 3.8.8 py388

1.6:创建工程目录并应用env环境

1
2
3
4
mkdir mywork && cd mywork
pyenv local py388
# 测试
python -V

1.7:常见问题

  1. 系统对应的shell版本,bash shell 和 zsh shell设置环境变量的方法不同
  2. 设置pyenv虚拟python后,python显示找不到,这是因为环境变量少了 pyenv ini –path 这个,重新设置环境变量即可
  3. python需要其他依赖时(Django环境),需要重新安装依赖,并重新使用 pyenv install 3.8.8来安装python解释器

02:Mac系统安装-brew方法

2.1:安装brew

2.2:安装pyenv

1
brew install pyenv pyenv-virtualenv

2.3:增加环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
cat .zshrc
export LANG=zh_CN.UTF-8

#pyenv
eval "$(pyenv init --path)"

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

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

2.4:此方法遇到的问题

03:Mac系统安装-installer方法

3.1:pyenv官网

1
https://github.com/pyenv/pyenv#installation

3.2:通过脚本进行安装

1
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

3.3:添加环境变量

MacOS打开终端命令行时,在窗口的正上方有shell类型显示。

3.3.1:bash shell

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

3.3.2:zsh shell

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

3.4:重新打开终端窗口测试环境

1
2
3
linux98@linux98deMac cache % pyenv
pyenv 2.0.0
Usage: pyenv <command> [<args>]

3.5:在MacOS最新的11系统上,pyenv安装3版本系统的问题

macos11使用pyenv安装3.6.9会有问题,使用下面的方法可以解决
可能会因为网络影响后面的参数,多试几次就可以了(2021年05月25日21:00:32亲测有效)

1
pyenv install --patch 3.6.9 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch)

04:pyenv的使用

记录了一些常用的方法

4.1:使用pyenv安装多版本python

1
2
3
4
5
6
7
8
9
linux98@linux98deMac cache % pyenv install 3.8.8 -vv 
linux98@linux98deMac cache % pyenv versions
* system (set by /Users/linux98/.pyenv/version)
3.6.9
3.8.8
linux98@linux98deMac cache % python2 -V
Python 2.7.16
linux98@linux98deMac cache % python3 -V
Python 3.8.2

4.2:使用离线方式安装python

在pyenv的home目录中创建一个cache的文件夹,把.xz格式的安装包放进去,再次执行就会优先读取cache中的安装包

1
2
3
4
5
linux98@linux98deMac cache % pwd
/Users/linux98/.pyenv/cache
linux98@linux98deMac cache % ls
Python-3.6.9.tar.xz error.log openssl-1.1.1i.tar.gz
Python-3.8.8.tar.xz openssl-1.1.0j.tar.gz readline-8.0.tar.gz

4.3:创建虚拟环境

1
2
3
4
linux98@linux98deMac ~ % mkdir -p projects/{py369,py388}
linux98@linux98deMac ~ % cd projects/py369
linux98@linux98deMac py369 % pyenv virtualenv 3.6.9 env369
linux98@linux98deMac py369 % pyenv virtualenv 3.8.8 env388

4.4:切换虚拟环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#切换当前目录环境为env369
linux98@linux98deMac py369 % pyenv local env369
linux98@linux98deMac py369 % python -V
Python 3.6.9
(env369) linux98@linux98deMac py369 % cd ..
#退出后就切换回系统环境了
#切换为388的工作目录
linux98@linux98deMac projects % cd ../py388
#切换当前目录环境为env388
linux98@linux98deMac py388 % pyenv local env388
#查看python版本
(env388) linux98@linux98deMac py388 % python -V
Python 3.8.8
(env388) linux98@linux98deMac py388 % cd ..
#退出虚拟环境后又切换回系统环境
linux98@linux98deMac projects % python -V
Python 2.7.16

4.5:pyenv virtualenv 的几种切换模式

1
2
3
4
5
6
7
8
9
# global  设置或显示全局Python版本,该设置是全局变量,慎用!
pyenv global py388

# local 设置或显示本地应用程序特定的Python版本,该设置是针对与项目目录进行设置,影响的是项目目录本身和其子文件夹
pyenv local py388

# shell 设置或显示特定于shell的Python版本,该设置是针对于当前shell窗口进行设置,退出shell后失效。
pyenv shell py388