管道冻结与管道清单

为什么 pip list生成的列表比 pip freeze更全面?

$ pip list
feedparser (5.1.3)
pip (1.4.1)
setuptools (1.1.5)
wsgiref (0.1.2)
$ pip freeze
feedparser==5.1.3
wsgiref==0.1.2

皮普的文件上写着:

别动 以需求格式安装的输出包。
名单 列出已安装的软件包。

什么是“需求格式”?

192585 次浏览

人们可以通过以下方式产生 requirements.txt:

$ pip freeze > requirements.txt

用户可以使用这个 requirements.txt文件来安装所有的依赖项。例如:

$ pip install -r requirements.txt

这些软件包需要采用特定的格式,以便 pip能够理解,例如:

# requirements.txt
feedparser==5.1.3
wsgiref==0.1.2
django==1.4.2
...

这就是“需求格式”。

在这里,django==1.4.2意味着安装 django版本 1.4.2(尽管最新版本是1.6.x)。 如果不指定 ==1.4.2,则将安装可用的最新版本。

你可以在“ Virtualenv 和 pip 基础”里读到更多, 以及官方的“ 需求文件格式”文件。

要回答这个问题的第二部分,pip list中显示的两个包(但不是 pip freeze)是 setuptools(这是 easy _ install)和 pip本身。

看起来 pip freeze并没有列出 pip 本身所依赖的软件包。您也可以使用 --all标志来显示这些包。

来自 文件:

--all

不要在输出中跳过这些包: pip、 setuptools、 distribution、 eler

看看 Pip 文件,它将两者的功能都描述为:

管道清单

列出已安装的包,包括可编辑内容。

皮普冻结

以需求格式安装的输出包。

所以有两个不同之处:

  1. 输出格式,freeze为我们提供了标准的需求格式,以后可以在 pip install -r中使用它来安装需求。

  2. 输出内容,pip list包括可编辑的 pip freeze没有。

主要的区别在于,pip freeze的输出可以被转储到 requments.txt 文件中,并在以后用于重新构造“冻结”环境。

换句话说,你可以跑: 在一台机器上使用 pip freeze > frozen-requirements.txt,然后在另一台机器上使用 pip freeze > frozen-requirements.txt,或者在一个干净的环境中使用 pip freeze > frozen-requirements.txt,你可以这样做: pip install -r frozen-requirements.txt 并且您将得到一个相同的环境,其中安装的依赖项与您在原始环境中生成 zen-demand. txt 时所安装的完全相同。

pip list显示 全部安装的软件包。

pip freeze以需求格式显示通过 pip(如果使用该工具,则为 pipenv)命令安装的包

注意下面的 < strong > setuptools < strong > pip 车轮是在 pipenv shell创建我的虚拟信封时安装的。这些软件包是我用 pip安装的 没有:

test1 % pipenv shell
Creating a virtualenv for this project…
Pipfile: /Users/terrence/Development/Python/Projects/test1/Pipfile
Using /usr/local/Cellar/pipenv/2018.11.26_3/libexec/bin/python3.8 (3.8.1) to create virtualenv…
⠹ Creating virtual environment...
<SNIP>
Installing setuptools, pip, wheel...
done.
✔ Successfully created virtual environment!
<SNIP>

现在回顾并比较我只安装了 Cool-lib < strong > sampleproject (其中 胡椒是一个依赖项)的各个命令的输出:

test1 % pip freeze       <== Packages I'VE installed w/ pip


-e git+https://github.com/gdamjan/hello-world-python-package.git@10<snip>71#egg=cool_lib
peppercorn==0.6
sampleproject==1.3.1




test1 % pip list         <== All packages, incl. ones I've NOT installed w/ pip


Package       Version Location
------------- ------- --------------------------------------------------------------------------
cool-lib      0.1  /Users/terrence/.local/share/virtualenvs/test1-y2Zgz1D2/src/cool-lib           <== Installed w/ `pip` command
peppercorn    0.6       <== Dependency of "sampleproject"
pip           20.0.2
sampleproject 1.3.1     <== Installed w/ `pip` command
setuptools    45.1.0
wheel         0.34.2

对于那些寻求解决方案的人来说。如果你不小心用 pip list而不是 pip freeze做了 pip的要求,并且想要转换成 pip 冻结格式。我写这个 R 脚本就是为了这样做。

library(tidyverse)


pip_list = read_lines("requirements.txt")


pip_freeze = pip_list %>%
str_replace_all(" \\(", "==") %>%
str_replace_all("\\)$", "")


pip_freeze %>% write_lines("requirements.txt")
pip list

列出已安装的软件包: 显示 全部已安装的软件包,甚至显示 pip 已隐式安装的软件包

pip freeze

列出已安装的软件包:-列出使用 pip 命令安装的软件包

Pip 冻结具有 --all标志来显示所有包。

其他不同之处在于它呈现的输出,您可以通过运行命令来检查这些输出。

生成需求文件的首选方法是:

pip list --format=freeze > requirements.txt

这种方法只保留包的名称和包的版本,没有潜在的链接到本地文件路径,’pip 冻结’有时会单独给我。需求文件中的本地文件路径使您的代码库更难为其他用户使用,而且一些开发人员不知道如何解决这个问题,所以为了便于采用,我更喜欢这种方法。