如何从 virtualenv 中删除未使用的包?

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

当我在 virtualenv 中使用 pip 安装软件包时,如何跟踪它们?

现在看起来很乱;如果我安装包 A,它会自动安装其依赖项; B、C 和 D。然后我决定使用包 N,它也安装了它的依赖项。

现在,当我删除包 A 时,它的依赖项不会自动删除。

如何保持我的 virtualenv 干净?有没有工具可以检查未使用的包并将其删除?

python virtualenv pip
5个回答
23
投票

要删除包:

pip uninstall package_name

获取任何给定包所需的包列表:

pip show package_name

这将向您显示运行所需的软件包,以及运行所需的软件包。

因此,卸载一个包及其所有依赖包的最佳方法是先运行

pip show package_name
查看其依赖包列表,然后将其连同其依赖包一一卸载。例如:

pip show package_name
pip uninstall package_name
pip uninstall dependency_package_1
pip uninstall dependency_package_2
pip uninstall dependency_package_3
...
...
...

16
投票

制作 virtualenvs 相对便宜。每当遇到这种情况时,您都可以创建一个新的 virtualenv 并再次运行 pip install 。

不是很优雅,但它可以完成工作。当然,您需要维护 pip 安装的一些要求文件,如果您有 pip 的本地索引或缓存,安装速度会更快。


7
投票

要获得一个干净的环境,就要创造一个新的环境。一些 pip hooks 可以帮助你走上这条路:

  • pip freeze
    获取已安装软件包及其版本的列表,稍后可以与
  • 一起使用
  • -r <file>
    安装需求文件中所述的软件包列表
  • --build <dir>
    将构建放在特定目录中
  • --no-clean
    不清理构建目录
  • 稍后您可以使用这些构建
    --no-download
  • --no-deps
    不安装依赖项

2
投票

另一种方法是在“setup.py”或“requirements.txt”中命名项目的每个依赖项。使用 virtualenv 多次执行 setup.py 或 pip install

cat requirements.txt
才能成功运行您的应用程序。之后,手动将新的依赖项添加到其中一个文件,以保持依赖项同步。


0
投票

虽然其他答案基本上是正确的,但以下是我建议使用虚拟环境完成他们建议的具体步骤(注意 Conda 不同,这仅适用于您询问的虚拟环境):

首先,确保您的requirements.txt 文件仅包含您已明确安装的软件包以及所需的版本。您可以通过“pip freeze”生成列表,但该命令将列出所有包,而不仅仅是“顶级”包,因此请务必修剪它。 requirements.txt 看起来像这样:

python-dotenv~=1.0.0
pypdf2~=3.0.1
...and so on...

其次,通过附加 -backup 来重命名现有的 venv 目录(这样万一出现问题,你可以随时将其恢复)

cd <project dir>
mv venv venv-backup

返回 PyCharm,进入“设置...”->“项目:MyProject”->“Python 解释器”。顶部的“Python Interpreter”现在将变成红色,因为它不再看到您的 venv。单击“添加解释器”->“添加本地解释器...”,然后在出现的对话框中选择 Virtualenv 环境。将其保留为“新”,该位置应该会自动填充您的旧信息。点击“确定”。

现在转到 PyCharm 中的“终端”选项卡,然后输入:

pip install -r requirements.txt

这应该将与您为“顶级”软件包指定的版本兼容的所有内容的最新版本重新安装到您的新 venv 中。它还将有助于列出requirements.txt 文件的哪一行导致安装每个附加包。

如果一切正常,您可以删除 venv-backup。 (更改名称的另一种方法是在 PyCharm 中创建第二个 venv,切换到它,然后在新的运行时删除第一个 venv。我只是不喜欢用这种方法不断旋转 venv 名称。)

我同意 PyCharm 应该更好地自动跟踪这一点,但在那之前,我希望这会有所帮助。

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