早先听说python的时候已经是2.x和3.x并存了,据说3.x还不兼容2.x,想着这高版本连自己的旧版本都不兼容,这格局应该也发展不咋地.
时间是把杀猪刀,机器学习这个神奇的东西最终把这门语言再次推向了高潮,最神奇的是连运维都要和机器学习沾边,美其名:AiOps.这不行啊,不学习一下机器学习都跟不上运维的发展趋势了,于是机器学习没学咋地,python倒是比较溜了.
学python一般都系统自带2.7,但对于我这半道入门的选手,实在没必要卡在2.x系列.于是多版本python管理是要玩溜的第一步.今天我们就一起学习一下python处理管理工具
pyenv安装

curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
or
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

设置环境变量:
两种Shell,bash用第一种,我是zsh所以我用第二种

vim ~/.bashrc 
export PYENV_ROOT="$HOME/.pyenv" 
export PATH="$PYENV_ROOT/bin:$PATH" 
eval "$(pyenv init -)"
$ source ~/.bashrc
或者
$ vi ~/.zshrc:
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
然后同样激活上面的配置:
$ source ~/.zshrc

现在我们就可以使用pyenv了:

pyenv versions
* system (set by /Users/rainbird/.pyenv/version)
  3.7.3
  3.7.5
  3.8.2
星号表示当前正在使用的Python版本。

正常应该显示空吧?我上面列出来是我本地使用的版本(看看,都低于3.7吧)

查看所有可安装的Python版本:

pyenv install -l

安装与卸载:

pyenv install 3.7.3   # 安装python3.7.3
pyenv uninstall 3.7.3 # 卸载python3.7.3

设置python版本
对所有的Shell全局有效,会把版本号写入到~/.pyenv/version文件中

pyenv global 3.7.3

只对当前目录有效,会在当前目录创建.python-version文件

pyenv local 3.7.3

只在当前会话有效

pyenv shell 3.7.3

重置版本设置
只有 pyenv shell 和 pyenv local 命令有--unset参数

pyenv shell --unset
pyenv local --unset

常见问题:

  • 下载过慢
    pyenv install执行以后,由于使用下载源码包使用的官方地址,很大概率会卡在第一步的下载,这时候我一般会选择使用sohu源,将源文件下载到pyenv的cache目录,然后再执行pyenv install.
    以3.8.2为例

    export v=3.8.2;wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v
  • 各种找不到问题一步解决

    apt-get install build-essential zlib1g-dev libffi-dev libbz2-dev libreadline-dev libssl-dev libsqlite3-dev  -y
  • 找不到C编译器
    configure: error: no acceptable C compiler found in $PATH

    apt-get install build-essential -y
  • 找不到zip模块
    zipimport.ZipImportError: can't decompress data; zlib not available

    apt-get install zlib1g-dev -y
  • 找不到ctypes
    ModuleNotFoundError: No module named '_ctypes'

    apt-get install libffi-dev
  • bz2扩展未编译
    WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
    apt-get install -y libbz2-dev libreadline-dev
  • readline扩展未编译
    WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?

    apt-get install -y libbz2-dev libreadline-dev
  • ssl扩展未编译
    ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

    apt-get install libssl-dev -y
  • sqlite3未编译
    WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
    apt-get install libsqlite3-dev -y