Pipenv-官方推荐的Python打包工具

时间:2020-03-21 11:46:35  来源:igfitidea点击:

之前我们发布了使用PIP管理Python软件包的教程。

在该教程中,我们讨论了如何安装pip,以及如何使用pip安装,更新和卸载Python软件包。
我们还讨论了虚拟环境的重要性以及如何使用venv和virtualvnv工具创建虚拟环境。
今天,我们将学习另一个名为pipenv的python软件包管理器。
它是Python.org推荐的新Python包装工具。
它可用于轻松安装和管理python依赖项,而无需创建虚拟环境。
Pipenv自动为项目创建和管理virtualenv。
当我们安装/卸载软件包时,它还会从Pipfile中添加/删除软件包。

为什么选择Pipenv?

Pipenv解决了以下实时问题:

  • 我们不再需要创建虚拟环境。 Pipenv将自动为项目创建virtualenv。简单地说,pip和virtualenv可以一起使用。
  • 管理requirements.txt文件可能会出现问题,因此Pipenv使用即将到来的Pipfile和Pipfile.lock代替,这对于基本用例而言是优越的。
  • 它是安全的。哈希值随处可见。自动公开安全漏洞。
  • 随时查看依赖关系图。
  • 通过加载.env文件简化开发工作流程。

好吧,让我们开始吧。

安装Pipenv,官方推荐的Python打包工具

有许多安装Pipenv的方法。
我们将看到两种官方推荐的方法。

1.使用pip安装pipenv

官方推荐的方式是使用pip。
确保已安装python和pip。
如果没有,请参考本文第一段中链接的上一教程。

pip安装完成后,运行以下命令以安装pipenv。

$pip install --user pipenv

此命令将在用户级别(即非系统范围)安装pipenv。
如果在安装后shell中没有pipenv,则可能需要将用户库的二进制目录添加到PATH中。
如果我们不知道用户群是什么,请运行以下命令找出来:

$python -m site --user-base

我们将看到类似下面的输出。

/home/sk/.local

从上面的输出中可以看到,我的用户基本目录是/home/sk/.local,而我的基本二进制目录是/home/sk/.local/bin。
清除?
好的。
现在,将其添加到PATH中。
为此,请编辑~/.profile文件:

$vi ~/.profile

在末尾添加以下行:

export PATH="$HOME/.local/bin:$PATH"

按ESC键,然后键入:wq以保存并退出文件。
然后,运行以下命令以使更改生效。

$source ~/.profile

最后,运行以下命令:

$pipenv --update

要随时升级pipenv,请运行以下命令:

$pip install --user --upgrade pipenv

2.使用pipsi安装pipenv

Pipsi是一个功能强大的工具,可让我们将Python脚本安装到隔离的虚拟环境中。

要安装pipsi,请运行:

$curl https://raw.githubusercontent.com/mitsuhiko/pipsi/master/get-pipsi.py | python

按照屏幕上的说明进行操作,我们必须更新PATH。

一旦安装了pipsi,请运行以下命令来安装pipenv:

$pipsi install pew
$pipsi install pipenv

最后,运行以下命令:

$pipenv --update

要随时升级pipenv,只需运行:

$pipsi upgrade pipenv

使用Pipenv管理Python软件包

在shell程序中运行“ pipenv”以显示可用命令和常规选项的列表。

$pipenv

安装套件

创建一个新项目或者转到现有项目的目录。

$mkdir myproject
$cd myproject

为项目安装软件包:

$pipenv install requests

当我们进入项目目录(在本例中为myproject)时,将看到两个文件,即Pipfile和Pipfile.lock。
Pipfile包含新安装的软件包的信息,例如名称,版本等。
我们可以使用此Pipfile跟踪要与其他人重新安装或者共享项目时项目需要哪些依赖项。

$cat Pipfile

并且,Pipfile.lock包含系统信息,已安装软件包的所有依赖关系(包括其版本)以及所有已安装软件包及其依赖关系的所有哈希。

$cat Pipfile.lock

现在安装另一个软件包,并再次检查两个文件的内容。
我们会注意到,Pidfile现在包含两个软件包。
并且,Pidfile.lock包含已安装软件包的所有依赖关系,包括它们的版本,以及所有已安装软件包的所有哈希及其依赖关系。
简而言之,每次安装新软件包时,这两个文件都会自动更新。

你注意到了吗?
我还没有创建任何虚拟环境。
Pipenv为我的项目自动创建了虚拟环境。
想知道项目存储其中?
只需运行此命令即可了解虚拟环境位置。

$pipenv --venv
/home/sk/.local/share/virtualenvs/myproject-x7-2XYPN

要查看项目的家庭详细信息,请运行:

$pipenv --where
/home/sk/myproject

正如我们在两个输出中一样,“/home/sk/myproject”是我的项目的主目录,而“ /home/sk/.local/share/virtualenvs/myproject-x7-2XYPN”是我的虚拟环境。

我们可以“ ls”进入virtualenv以查看其中的内容。

$ls /home/sk/.local/share/virtualenvs/myproject-x7-2XYPN

更新包

要更新所有软件包,请运行:

$pipenv update

此命令将卸载所有软件包,然后将软件包重新安装到最新的兼容版本。

检查包装的完整性

我们是否担心已安装的软件包中是否存在任何安全漏洞?
没问题! Pipenv得到了支持。
要检查软件包的完整性,只需运行以下命令:

$pipenv check
Checking PEP 508 requirements…
Passed!
Checking installed package safety…
All good!

上面的命令检查安全漏洞并对照Pipfile中提供的PEP 508标记。

查看依赖图

让我们运行“ pipenv图”,看看会发生什么。

$pipenv graph

如我们所见,此命令显示依赖关系图。

卸载软件包

要删除软件包,请运行:

$pipenv uninstall requests
Un-installing speedtest-cli…
Uninstalling speedtest-cli-1.0.7:
 Successfully uninstalled speedtest-cli-1.0.7
Removing speedtest-cli from Pipfile…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (c23e27)!

要卸载所有内容,请运行:

$pipenv uninstall --all
Un-installing all packages from virtualenv…
Found 1 installed package(s), purging…
Environment now purged and fresh!

有关更多详细信息,请运行:

$pipenv -h

或者,

$pipenv --man

据我测试,Pipenv比pip更容易使用。
由于它是Python.org的官方推荐,因此我们现在可以在安装Python软件包时完全摆脱venv和virtualenv。