机器学习:软件工程方法与实现
上QQ阅读APP看书,第一时间看更新

2.2.1 Pipenv简介

Pipenv官网有这样一句话对Pipenv的介绍,“Pipenv[1]:Python Development Workflow for Humans.”即“适合人类的Python开发工作流”,其支持Python 2和Python 3。Pipenv的第一个版本在2017年1月发布,旨在将世界上各种打包(packaging)方法(包括bundler、composer、npm、cargo等)中的精品带到Python世界。截至2019年2月,该项目在GitHub上的star已达1.6万,足见其受欢迎程度,同时其也是Python官方推荐的软件包管理工具[2]。Pipenv的作者是Kenneth Reitz,他也是Python知名包request的作者。

不同的计算机开发语言中,出现了不同的软件工程开发实践。如下的包管理工具极大地减少了软件工程师在包管理和维护上的时间。

·Bundler:Ruby语言的开发项目管理工具。

·Composer:PHP语言的包管理工具。

·npm:JavaScript的包管理工具。

·Cargo:Rust系统编程语言中的包管理工具。

·Yarn:代码包、模块的管理工具,往往替代npm使用。

Pipenv能基于当前系统的Python自动为Python项目创建和管理一个虚拟环境。Pipenv自身并没有受到Python版本的限制,比如,它可在Python 2环境下安装Python 3的虚拟环境,反之亦然。在创建和管理环境的过程中会自动生成两个特殊的纯文本文件:Pipfile和Pipfile.lock。Pipfile文件记录了当前虚拟环境的基础Python版本等信息。当用户安装和卸载Python包时,Pipfile还会记录下用户的操作涉及的Python包信息;Pipfile.lock顾名思义,是Pipfile的“锁”文件,记录了某个时刻Pipfile的快照,即当用户在当前环境完成开发后,使用pipenv lock命令“复制”当前信息到Pipfile.lock。在新的环境下只要使用Pipfile和Pipfile.lock即可重现原有的虚拟环境,从而实现环境迁移。Pipenv具有如下的几个特点,可谓相当的人性化。

·一个工具代替两个工具:Pipenv是pip和virtualenv这两个工具的功能集成,可同时工作。

·摒弃使用传统的requirements.txt记录Python包的安装信息(某些情况下存在问题),转为使用Pipfile和Pipfile.lock文件。

·处处使用哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞,也可进行pipenv check。

·软件包依赖可视化(pipenv graph)。

·通过加载.env文件简化开发工作流程。

[1] https://pypi.org/project/pipenv/

[2] https://www.ostechnix.com/pipenv-officially-recommended-python-packaging-tool/