功能强大的pip依赖管理工具pipenv

pip是Python语言的官方包管理器,但是pip在使用的时候有一个问题,就是只能安装为全局的包,假如有两个项目需要使用包的不同版本,那么pip就无能为力了。因此出现了virtualenv这样的工具,可以创建虚拟环境,在虚拟环境中用pip安装的包和全局版本的不会发生冲突。


功能强大的pip依赖管理工具pipenv


因此有大神仿照npm、maven等包管理工具,开发了一个名为pipenv的工具,它集虚拟环境创建、依赖版本锁定、配置文件记录版本等功能于一体,使用起来也极为简单。仅需一条命令即可完成原来virtualenv工作流好几条命令的作用。

安装pipenv

安装pipenv非常简单,直接用pip命令即可安装。

<code>pip install pipenv/<code>

安装完毕之后, 在一个空白目录输入下面的命令即可使用pipenv创建和初始化虚拟环境。

<code>pipenv install/<code>

默认情况下pipenv创建的虚拟环境目录在用户文件夹下,时间长了会累积很多无用的虚拟环境目录,因此我比较喜欢设置为在项目文件夹下创建虚拟环境。这需要设置PIPENV_VENV_IN_PROJECT环境变量,环境变量的值为空格即可。


功能强大的pip依赖管理工具pipenv

这样的话,运行pipenv命令的时候就可以发现,这次虚拟环境创建到了项目文件夹下。另外pipenv还创建了两个新的文件,Pipfile和Pipfile.lock,前者是pipenv的配置文件,后者是锁定文件,记录了详细的包版本配置。这和npm等包管理器的功能是一样的。

功能强大的pip依赖管理工具pipenv


pipenv使用起来也非常简单,下面是常用的命令。其实一般也就用到安装等命令。

<code># 安装依赖包
pipenv install requests
# 安装开发依赖包
pipenv install -d autopep8 pylint
# 更新虚拟环境和依赖包
pipenv update/<code>

选择虚拟环境版本

pipenv不仅仅是一个简单的虚拟环境包管理器,它还有一些非常好用的功能,可以极大的方便我们的开发。如果你已经安装了多个版本的Python,或者是Linux系统,有pyenv这个自动安装多版本Python的工具。那么pipenv在创建虚拟环境的时候,就可以使用参数设置版本号。


如果你是Linux系统,并且安装有pyenv,那么就可以随意指定版本号,pyenv会自动下载安装对应的版本。否则的话,只能指定系统已经安装的Python版本, 否则pipenv就会提示找不到该版本的Python。

<code># 使用Python 3.6
pipenv --python 3.6/<code>

设置包索引

默认情况下,pipenv会从pip的官方包索引去下载包,下载速度可能比较慢。不过我们可以使用国内的镜像来加快下载速度,修改办法很简单,编辑Pipfile文件,修改url即可。下面使用了清华大学的包索引镜像。

<code>[[source]]
name = "pypi"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
verify_ssl = true/<code>

如果你觉得每次都要设置一次镜像,很麻烦的话,其实也可以通过环境变量设置为永久配置。设置PIPENV_PYPI_MIRROR以及你要使用的镜像即可。


功能强大的pip依赖管理工具pipenv

查看安全问题

pipenv还提供了check子命令,通过它,我们可以查看当前项目中引用的包是否存在安全问题。如果存在的话,需要及时将依赖升级到修复了安全问题的版本。

<code>$ pipenv check

Checking PEP 508 requirements…
Passed!
Checking installed package safety…

33075: django >=1.10,<1.10.3>=1.10,<1.10.3>=1.10,<1.10.7>

和pip之间的转换

如果你还在坚持使用pip和requirements.txt,那么其实也可以开始尝试使用pipenv。pipenv也可以非常方便的和requirements.txt之间进行转换。


如果你准备用pipenv安装requirements.txt中定义的依赖包,在安装的时候指定-r参数即可。

<code>pipenv install -r path/to/requirements.txt/<code>

如果你要将项目中的pipfile依赖导出为requirements.txt,用下面的命令。

<code>pipenv lock -r/<code>

自动加载.env文件

有时候开发项目的时候需要模拟一些环境,因此需要配置一定的环境变量。常见做法就是将要用到的环境变量写入.env文件中。pipenv也可以自动识别这些环境变量,无需任何操作。


环境变量支持

pipenv还支持在配置文件中引入环境变量,如果你准备将项目放到公开的仓库中,但是又不想让别人看到你的秘钥等私有信息,就可以将这些私有信息以环境变量的方式设置,然后在配置文件中引入。

<code>[[source]]
url = "https://${PYPI_USERNAME}:${PYPI_PASSWORD}@my_private_repo.example.com/simple"
verify_ssl = true
name = "pypi"

[dev-packages]

[packages]
requests = {version="*", index="home"}
maya = {version="*", index="pypi"}
records = "*"/<code>

pipenv是一个非常好用的工具,填补了pip在依赖管理方面的空白。所以现在很多环境都支持pipenv。如果大家也觉得pipenv好用的话,欢迎评论区一起交流,关注+转发,谢谢!


分享到:


相關文章: