Python 版本及依赖管理的最终方案 pyenv + Pipenv
前言
作为个程序员,总会遇到这些问题:如何升级系统的 Python 版本;如何安装多个 Python 版本;如何隔离项目的依赖;在开发机上好好的,为什么线上、CI 就运行失败了呢
- 通过下载 Python 源码编译安装(最好不要覆盖掉系统原有的 Python,可安装在自己的 home 目录或者其他路径下)
- 通过 Virtualenv 来隔离项目 Python 环境
- 通过
pip freeze > requirements.txt
和pip install -r requirements.txt
来固定依赖的版本,来确保重新安装后的 Python 环境是一致
随着开发项目的增多,mac 上的 Python 环境越来越复杂,就像下面这张图一样。面对这样的复杂的环境,管理起来太折磨人了,且会因冗余而浪费硬盘空间。
那么我们如何来管理越来越复杂的 Python 环境?解决该问题的最终方案是:使用 pyenv 管理多个 python 版本;使用 Pipenv 管理项目所需要的依赖。
pyenv
Github Repo: pyenv/pyenv
参照此教程安装 pyenv
使用
pyenv install --list # 列出所有可安装的版本
pyenv install 3.7.1 # 安装指定版本
pyenv shell 3.7.1 # 激活该版本环境
pyenv global 3.7.1 # 设置全局为该版本
pyenv local 3.7.1 # 设置进入当前目录后,Python 环境自动切换为该版本
安装失败可能是因为编译 Python 所需要的依赖没有安装。 troubleshooting/FAQ | pyenv/wiki 如果想在安装的时候,把 Python 编译为共享库 ,请看 FAQ 的最后两节
pipenv
Github Repo: pypa/pipenv
使用其管理各项目的依赖
pipenv --python 3.7 # 创建 Python 3.7 的虚拟环境
pipenv install requests # 安装依赖
pipenv install black rope isort flake8 --dev # 安装开发依赖
pipenv shell # 激活该虚拟环境
pipenv run pip install requests # 在该虚拟环境下执行命令
# ...
具体怎么使用就看看其 README.md 吧
也可以看作者的 PyCon 分享 Kenneth Reitz - Pipenv: The Future of Python Dependency Management - PyCon 2018 | Youtube