点子冻结与点子列表

时间:2013-09-23 18:46:13

标签: python python-2.7 python-3.x pip

产出比较显示出差异:

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更全面的列表?

7 个答案:

答案 0 :(得分:92)

当您使用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”文件。

答案 1 :(得分:27)

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

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

来自the documentation

  

--all

     

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

答案 2 :(得分:19)

查看pip documentation,它将两者的功能描述为:

点子列表

  

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

pip冻结

  

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

所以有两点不同:

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

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

答案 3 :(得分:18)

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

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

答案 4 :(得分:7)

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

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

在下面标记 设置工具 pip 滚轮 < / em>在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 sampleproject 的各个命令的输出em>(其中 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

答案 5 :(得分: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")

答案 6 :(得分:0)

pip list

列出已安装的包:显示所有已安装的包,即使是 pip 隐式安装的包

pip freeze

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

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

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