点冻结与点列表

问题描述 投票:0回答:8

为什么

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

Pip 的文档指出:

   
冻结 以需求格式输出已安装的包。
列表 列出已安装的软件包。

什么是“需求格式”?

python pip
8个回答
199
投票

可以通过以下方式生成

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 基础知识”中阅读更多内容, 以及官方“需求文件格式”文档。


75
投票

为了回答这个问题的第二部分,

pip list
中显示但不是
pip freeze
中显示的两个软件包是
setuptools
(即easy_install)和
pip
本身。

看起来

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

来自文档

--all

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


63
投票

主要区别在于

pip freeze
的输出可以转储到requirements.txt文件中,并在以后用于重新构建“冻结”环境。

换句话说,你可以运行:

pip freeze > frozen-requirements.txt
在一台机器上,然后在另一台机器上或在干净的环境中,您可以执行以下操作:
pip install -r frozen-requirements.txt
您将获得一个相同的环境,并且安装了与生成 freeze-requirements.txt 的原始环境中完全相同的依赖项。


31
投票

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

点列表

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

点冻结

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

所以有两个区别:

  1. 输出格式,

    freeze
    为我们提供了标准需求格式,稍后可以与
    pip install -r
    一起使用来安装需求。

  2. 输出内容,

    pip list
    包括
    pip freeze
    不包含的可编辑内容。


22
投票

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

pip list --format=freeze > requirements.txt

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


21
投票

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

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

请注意,当 pipenv shell 创建我的虚拟信封时,会安装 setuptoolspipwheel

。这些软件包是我使用 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

0
投票

对于那些寻找解决方案的人。如果您不小心用

pip
而不是
pip list
提出了
pip freeze
要求,并且想要转换为 pip freeze 格式。我编写了这个 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")

0
投票
pip list

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

pip freeze

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

pip freeze 有

--all
标志来显示所有包。

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

© www.soinside.com 2019 - 2024. All rights reserved.