pip freeze命令未显示所有已安装的软件包

21

我正在使用 virtualenv。我已安装了 fabricpip。但是,pip freeze 不会提供任何有关此的提示。该软件包在我的 virtualenv 中,但 pip 没有给出任何信息。为什么会这样呢?有什么调试方法吗?


你是在虚拟环境中使用 pip 吗? - Thomas Fenzl
8个回答

8

您可以尝试使用--all标志,像这样:

pip freeze --all > requirements.txt

7

我已经尝试过这个操作:

在 "env" 目录中创建一个虚拟环境:

$virtualenv2.7 --distribute env
New python executable in env/bin/python
Installing distribute....done.
Installing pip................done.

接下来,激活虚拟环境:

$source env/bin/activate

提示已更改。现在安装Fabric:

(env)$pip install fabric
Downloading/unpacking fabric
  Downloading Fabric-1.6.1.tar.gz (216Kb): 216Kb downloaded
  Running setup.py egg_info for package fabric   
...

Successfully installed fabric paramiko pycrypto
Cleaning up...

并且 pip freeze 显示正确的结果:

(env)$pip freeze
Fabric==1.6.1
distribute==0.6.27
paramiko==1.10.1
pycrypto==2.6
wsgiref==0.1.2

也许您忘记激活虚拟环境了?在*nix控制台上,键入which pip以查找。

哎呀,我太傻了。我在执行命令 pip freeze | grep fabric (我安装了很多包)时出错了。我敢肯定我已经手动扫描了整个列表,但不知怎么就跳过了它。奇怪的是它被安装为 Fabric,但无论如何这都不是我的好表现。 - blueFast
grep -i 也是我的好朋友 :) - mawimawi
是的!通常在尝试其他方法之前,我会运行“grep -i”,但在这种情况下,我非常确信它应该是“fabric”,以至于我甚至没有考虑过其他可能性。我的意思是,fabric团队中谁想到打破多年来使用小写字母作为包名的传统呢?特别是当该软件包在pypi上被称为fabric时。 - blueFast
也许是同样的人将 django 注册为 Django - mawimawi

5

虽然您的问题是由于打字错误引起的,但为了帮助其他用户:

pip freeze 不显示pip所依赖的软件包,如果您想获取所有软件包,可以使用 pip freeze --all 或者 pip list


1
如果您已将所有预安装的软件包重定向到名为 pip-requirements.txt 的文件中,则解决上述问题非常简单。

1)删除您的虚拟环境文件夹创建一个新的(我给它取名为venv

rm -rf venv && virtualenv venv

2) 从 pip-requirements.txt 安装所有的要求/依赖项

pip install -r pip-requirements.txt

3) 现在您可以检查已安装的Django应用程序的软件包

pip freeze

4) 如果您忘记更新要求文件(pip-requirements.txt),那么再次安装fabric (可选步骤)

注意: 在为您的Django应用程序安装任何依赖项后,请始终按照以下方式更新任何文件中的要求(确保您的virtualenv已激活)

pip freeze > pip requirements.txt

就这样。


1

除了以上的修复方法,我还需要添加我的修复方法。在windows上,即使激活虚拟环境,pip freeze仍然没有给我所有安装包的列表。所以我用python -m pip install --upgrade pip命令升级了我的pip,然后使用pip freeze。这次它成功并给了我所有安装包的列表。


0

对于那些通过PyCharm IDE添加Python模块的人,在从命令提示符生成虚拟环境后,祝你好运!你需要手动重新构建requirements.txt文件,并通过首先运行pip3 freeze并添加PyCharm缺失的内容来实现。

我强烈建议切换到Visual Studio Code。


0
这可能很蠢,但我遇到了同样的问题。我通过刷新vs code文件目录(在vscode中有一个重新加载按钮)解决了它。 :)

0

如果以上答案都对你没有用。

就像我一样,你可能在venv和pip配置方面遇到了问题。

进入你的venv/bin目录,打开pip文件,看看第二行是不是这样的: '''exec' "path/to/yourvenv/bin/python3" "$0" "$@"

看看这一行是否正确地指向了你的venv。 例如,在我的情况下, 我最初将虚拟环境命名为venv1, 后来将其重命名为venv2。 这样做会导致我的pip文件第二行出现:'''exec' "venv1/bin/python3" "$0" "$@" 为了正常工作,它应该有:'''exec' "venv2/bin/python3" "$0" "$@" 注意 "venv2" 而不是 "venv1",因为venv1现在已经重命名为venv2。

由于这个原因,Python会查找venv2中的pip并抛出错误或无法按预期工作。


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