一:前言
介绍一个包管理神器 - pipenv,这个工具可以让我们在写代码、创建 Python 运行环境、package 依赖关系以及项目合作的时候更有效率。
在 pycon2018 上,Kenneth Reitz 介绍的 Pipenv 在不久就成为了 Python 官方推荐的包管理工具。下面是 pycon2018 的链接,推荐大家看看:https://www.bilibili.com/video/av26610021/?p=1。
二:Python 包管理历史
最初的时候,我们有了 Python,但是没有干净的方法来安装软件包,早期的时候,当用户想安装包时,需要先从网上把文件下载下来,解压,然后执行 Python setup.py install, 就能将包安装好。
后来有了 PyPI,开发者可以把他们的包上传到上面,然后其他开发者可以从这里下载他们需要的包,然后再执行 python setup.py install 进行安装,但是这样还是存在许多的问题,比如说:整个过程需要人工,不方便自动化,无法安装多个不同版本等等。
再后来有了 easy_install,当用户想要安装某个包的是否,只要执行 easy_install 包名,工具就会自动把包以及依赖下载下来进行安装,这解决了无法自动化的问题,但是这种方法又带来了新的问题,只能安装,却没有方法卸载。
到了 2008 年,pip 出现了,还引入了 requirements files 的概念,可以使用户非常方便的复制 Python 环境。比如说安装某个包,执行 pip install 包名,需要卸载,执行 pip uninstall 包名,需要批量安装,执行 pip install -r requirements.txt。直到现在,pip 已经成为非常好用的包管理工具了。pip 解决了单个环境下的包管理问题,但是如果我们需要在一台机器上开发多个项目,这多个项目用到了相同包的不同版本,这就成了非常棘手的问题了。
为了解决这个问题,virtualenv 出现了。virtualenv 可以为每个项目创建一套隔离的 Python 环境,再使用 pip 进行包管理。目前 pip+virtualenv 是目前比较主流的 Python 开发流程。慢慢的这种方式也逐渐暴露出了缺点,比如 pip 的 requirements.txt 过于简单,没办法表示具体的依赖关系,需要使用两个工具(pip+virtualenv)才能完成工作。
为了解决这两个问题 pipenv 登场了,它主要使用 pipfile 来取代之前的 requirements.txt,pipfile 比 requirements.txt 表达能力更强,默认支持两种依赖,可以将多个 requirements.txt 的内容合并到一起,方便管理,并且通过 pipfile.lock 对环境进行明确,详细的描述。pipenv 可以让你无缝的使用 pipfile,pipfile.lock,保证每个依赖的信息都是明确的,它提供简洁的命令操作 virtualenv,并且提供很多辅助工具,比如 pipenv graph,可以显示项目的完整依赖关系。
目前 Pipenv 已经是 Python 官方推荐的工作流工具了。
三:Pipenv 实操
目前 pycharm2018.2.4 版本以上已经支持 pipenv 了。
首先打开命令行:输入 pip install pipenv 安装 pipenv 库。
然后输入:pipenv,如果有如下提示说明安装成功。
- 接着打开 pycharm 创建一个项目。
- 项目创建完成否生成一个 pipfile 文件,该文件默认的源是国外的,为了增加安装库的速度,我们把源改成清华源:https://pypi.tuna.tsinghua.edu.cn/simple
下面我们打开 pycharm 自带的 terminal 来安装一个简单的模块,检测是否成功。
在命令行输入:pipenv install requests
如果出现下面提示,说明安装成功。
如果出现如下错误,说明项目名称包含中文名。
至此,基本的 pipenv 环境就搭建好了。
四:pipenv 命令详解
1 | pip install --user --upgrade pipenv # 用户安装pipenv |