为什么我使用 pip freeze 命令却没有 setuptools 1.3.1 的信息?

27

我正在Ubuntu 12.04上运行virtualenvwrapper等软件(virtualenvwrapper 1.7.1.2,virtualenv 1.7.1.2,pip 1.0,Distribute 0.6.24,Python 2.7)。为了能够pip install matplotlib,我需要一个更新的Distribute/setuptools版本,所以我执行以下操作:

$ mkvirtualenv new_venv
$ pip install matplotlib # fails
$ easy_install -U distribute
# installs Distribute 0.7.3 in the venv,
# which then installs setuptools 1.3.1
$ pip install matplotlib # works

但是,当我运行 pip freeze 命令时,会得到以下结果:

argparse==1.2.1
distribute==0.7.3 # here's Distribute
matplotlib==1.3.1
nose==1.3.0
numpy==1.8.0
pyparsing==2.0.1
python-dateutil==2.2
six==1.4.1
tornado==3.1.1
wsgiref==0.1.2

setuptools在哪里?我尝试了只运行pip install setuptools,但它仍然没有出现。

2个回答

27

pip 不会列出 pip 本身依赖的包,除非你告诉它。你可以使用以下命令来包含这些包:

pip freeze --all

freeze 列出了按照 requirements 格式排列的包 - 用于 requirements 文件等 - 而 list 只是一个列表。

更多细节请参见Pip freeze vs. pip list


1
pip freeze --all在Python 2.7上的pip版本 7.0.1中无法正常工作。不过我使用了pip list命令,它可以正常工作。 - vlad-ardelean

10

在Ubuntu上,setuptools已经被系统包管理器安装了。因此,在运行 pip freeze时不会列出它。当创建一个虚拟环境时,您将收到这些消息。

mkvirtualenv test
New python executable in test/bin/python
Installing setuptools, pip...done.

如果您在此之后立即运行pip freeze,您将得到类似于以下内容的结果

argparse==1.2.1
wsgiref==0.1.2

这里不会列出setuptoolspip

如果你想要全部内容,可以执行pip list命令,会得到类似于下面的结果。

argparse (1.2.1)
pip (1.5.6)
setuptools (3.6)
wsgiref (0.1.2)

4
“freeze”和“list”之间的区别是什么? 答:freeze指的是冻结一个对象,使其不可变。而list则是一种Python内置类型,用于存储有序的元素列表,并且可以进行添加、删除等操作。 - nu everest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接