158

输出的比较揭示了差异:

user@user-VirtualBox:~$ pip list
feedparser (5.1.3)
pip (1.4.1)
setuptools (1.1.5)
wsgiref (0.1.2)
user@user-VirtualBox:~$ pip freeze
feedparser==5.1.3
wsgiref==0.1.2

Pip 的文档状态

freeze                      Output installed packages in requirements format.
list                        List installed packages.

但是什么是“需求格式”,为什么会pip list生成比 更全面的列表pip freeze

4

8 回答 8

130

当您使用 时virtualenv,您可以指定一个requirements.txt文件来安装所有依赖项。

一个典型的用法:

$ pip install -r requirements.txt

包需要采用特定格式pip才能理解,即

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 and pip Basics ”和官方的“ Requirements File Format ”文档中阅读更多内容。

于 2013-09-23T18:49:47.350 回答
56

The main difference is that the output of pip freeze can be dumped into a requirements.txt file and used later to re-construct the "frozen" environment.

In other words you can run: pip freeze > frozen-requirements.txt on one machine and then later on a different machine or on a clean environment you can do: pip install -r frozen-requirements.txt and you'll get the an identical environment with the exact same dependencies installed as you had in the original environment where you generated the frozen-requirements.txt.

于 2018-03-13T08:39:04.760 回答
54

为了回答这个问题的第二部分,显示的两个包pip listpip freezesetuptoolseasy_install)和pip它本身。

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

文档中

--all

不要在输出中跳过这些包:pip、setuptools、distribute、wheel

于 2015-02-04T19:50:16.480 回答
27

查看pip 文档,其中将两者的功能描述为:

点子列表

列出已安装的软件包,包括可编辑的。

点冻结

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

所以有两个区别:

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

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

于 2015-10-19T05:13:22.150 回答
12

pip list显示所有已安装的软件包。

pip freeze以需求格式显示您通过pip(或pipenv如果使用该工具)命令安装的软件包。

在创建我的虚拟信封时安装setuptoolspipwheel下面的注释。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-libsampleproject(其中peppercorn是依赖项)的各个命令的输出:

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
于 2020-02-04T15:02:54.417 回答
0

对于那些正在寻找解决方案的人。如果您不小心用代替提出pip要求,并想转换为 pip freeze 格式。我为此编写了这个 R 脚本。pip listpip freeze

library(tidyverse)

pip_list = read_lines("requirements.txt")

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

pip_freeze %>% write_lines("requirements.txt")
于 2020-12-28T11:21:59.783 回答
0

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

pip list --format=freeze > requirements.txt

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

于 2022-01-06T18:42:59.057 回答
-1
pip list

列出已安装的软件包:显示所有已安装的软件包,甚至 pip 隐含安装

pip freeze

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

pip freeze 具有--all显示所有包的标志。

其他区别是它呈现的输出,您可以通过运行命令来检查。

于 2021-01-11T06:37:08.343 回答