已经2018年了,如何更好的管理Python版本、环境与包?

都已经 2018 年了,Python 的解释器版本管理以及环境管理依然是一个令人头疼的问题。

Python 这两年乘着 AI 风潮迅猛发展,成了最炙手可热的编程语言。

另外 Python 2 到 3 的迭代也有很大的进展,各个主要的第三方包都已经开始支持 Python3

然而从基础语法开始入门的朋友,想要再进一步的时候,就会发现一些零散的、杂乱的、无厘头的问题接踵而至。

这些问题包括 Python 的编码问题,Python 2、3 版本差异问题,Python 包管理问题,项目组织问题。每一个问题都是各种饱含着历史负担,想要来龙去脉的理解这些问题,需要花费大量的时间和精力。

这些问题成为了 Python 劝退的最大力量。

对于此,也有不同面对方法,一般神经大条的人是熟视无睹,遇到是在卡壳的地方,再去临时抱佛脚放狗解决,或者祭出重装大法。对于比较龟毛的人,比如我,就会被吸入时间黑洞,浪费心智去了解,然而因为天资愚笨,还是有很多问题依然浆糊。

有人会说, Python3 都已经内置 virtualenv 了,环境管理还有问题吗?结论依然令人沮丧,依然还有很多问题,具体问题:

– virtualenv 只能隔离不同的开发环境,但是对于解释版本无法控制,也就是说 virtualenv 创建的时候的解释器就固定了
– virtualenv 本身只做隔离环境,不进行包管理,包管理还是需要自行使用 pip 那套机制来做,或者依靠其他工具

那么总结一下,对于 Python 解释器、环境以及包管理,我们的需求有哪些呢?

– 可以方便的管理多个不同版本的解释器,2.7.15、3.6、3.7 可以共存,随意切换使用
– 可以方便的管理多个不同的环境(venv)
– 可以方便的迁移开发环境
– 最好可以支持 windows、mac、linux

根据这样的需求,我给出的方案是 conda + pipenv

以往我习惯用 pyenv 来管理不同的 python 解释器,但是 pyenv 一些问题:pyenv 是通过 shell 来起效的,所以天然不支持 windows,另外 pyenv 对于 anaconda 系的解释器支持不是很好,与 conda 环境有些冲突(以后有可能解决),所以在解释管理这步我们直接用 conda 。

其中 conda 来管理不同的解释器版本,当然也可以用来管理其他 anaconda 支持的包,不过这部分就不和 pipenv 在一起工作了。

pipenv 主要用来

具体安装步骤:

1. 安装 miniconda

直接到 miniconda 官网下载最新的安装包即可,安装完不要忘记依照提示进行 .rc 类文件的启动配置

2. 安装 pipenv

可以直接使用 miniconda 的 base 环境的 pip 进行安装,pip install pipenv

另外对于 macOS 用户可以通过 brew 安装 pipenv, brew install pipenv

4. 最后配置系统环境变量 PIPENV_ENV_IN_PROJECT=1 让 pipenv 生成的 venv 保存在项目目录下,这样的好处是方便相关 ide 进行识别,也方便查看相关源码。

具体使用步骤:

– 解释器的管理

通过创建不同python版本的解释conda环境来管理不同python解释器,具体范例如下,比如我需要有 python 2.7 和 python 3.7 的解释器

那么就创建两个 conda 环境:

conda create -n py2.7 python=2.7
conda create -n py3.7 python=3.7

其中 -n 指定环境名字,可以任意指定,这里最好体现 python 解释器的版本

– 给不同的项目创建独立的 pipenv 环境

在项目目录下,执行:

pipenv --python {python 解释器的路径}

另外一些事项:

– 升级 miniconda ,miniconda 主要就是包含 conda 工具,升级 conda 即可:

conda upgrade -n base conda