使用pip list和pip freeze的区别?

一般使用pip list命令即可列出本地所安装的python包,那么pip freeze似乎也可以,请对比一下pip list命令和pip freeze命令。

喜欢这个问题 | 分享 | 新建回答

回答

妹岛

Aug 24, 2019
1 赞

确实,使用“pip list”命令“pip freeze”命令都可以实现列出本地安装的python包的功能;但是两者有本质上的区别

pip list 命令(List installed packages, including editables.)
该命令是正儿八经地把python安装包给列出来。

pip freeze 命令(Output installed packages in requirements format.)
该命令的意思是把已安装的python包以requirements参数的格式输出。




啥叫“把已安装的python包以requirements参数的格式输出”?那就要好好说道说道“pip freeze命令的用法”了!

pip freeze命令主要是为了环境迁移的作用,比如当前主机配置好了,想一次性把当前主机已经安装的python包都记录下来,然后下次去新的机器就可以自动安装了,那就使用“pip freeze”命令把本地已经安装的python包给按照requirements参数(就是pip install -r 所需要的那个文件的内容格式)的格式输出成requirements.txt即可:

$ pip freeze | tee requirements.txt

上述命令“pip freeze | tee requirements.txt”中的“requirements.txt”这个名字是可以自定义的,叫阿猫阿狗都可以,比如可以叫“dog.txt”,那命令就是“pip freeze | tee dog.txt”;其实就是把终端屏幕输出的内容保存到指定名称的txt文件中。

之后把生成的这个txt文件送到新的主机上,使用“pip install -r 自定义名称的txt文件”命令即可根据自定义的python包安装列表来安装模块:

$ pip install -r requirements.txt




题外话:使用“pip list”输出的python包,似乎比使用“pip freeze”输出的python包多几个,确实是多几个;因为正常使用“pip freeze”命令输出的python包是不包括wheel、pip、distribute、setuptools这几个包的,python环境迁移一般不会涉及到这几个包,所以一般不包括。如果非要强行输出这几个包,如下所示添加“--all”参数即可:

$ pip freeze --all