Python 版本及依赖管理的最终方案 pyenv + Pipenv
Dec 22, 2018
1 minute read

前言

作为个程序员,总会遇到这些问题:如何升级系统的 Python 版本;如何安装多个 Python 版本;如何隔离项目的依赖;在开发机上好好的,为什么线上、CI 就运行失败了呢

  1. 通过下载 Python 源码编译安装(最好不要覆盖掉系统原有的 Python,可安装在自己的 home 目录或者其他路径下)
  2. 通过 Virtualenv 来隔离项目 Python 环境
  3. 通过 pip freeze > requirements.txtpip install -r requirements.txt来固定依赖的版本,来确保重新安装后的 Python 环境是一致

随着开发项目的增多,mac 上的 Python 环境越来越复杂,就像下面这张图一样。面对这样的复杂的环境,管理起来太折磨人了,且会因冗余而浪费硬盘空间。

版本及依赖管理指北

那么我们如何来管理越来越复杂的 Python 环境?解决该问题的最终方案是:使用 pyenv 管理多个 python 版本;使用 Pipenv 管理项目所需要的依赖。

pyenv

Github Repo: pyenv/pyenv

参照此教程安装 pyenv

installation | 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

参考链接




comments powered by Disqus