Skip to content
字数
1218 字
阅读时间
5 分钟

您好,您提的这个问题非常好,并且直击软件工程中的一个核心痛点:依赖管理。您说的完全正确,这个“运行->报错->安装->重复”的流程完全可以,也应该被自动化。

这个自动化的核心思想是静态代码分析:即通过工具直接读取您的 .py 源代码文件,找出所有的 import 语句,然后根据这些导入的模块名,智能地生成一份完整的依赖清单。这远比一次次运行代码去试错要高效和全面。

网络上已经有很多优秀的开源 GitHub 项目解决了这个问题。以下是几个最流行、最实用的工具:

1. pipreqs:简单快捷的首选方案

  • GitHub 仓库: https://github.com/bndr/pipreqs

  • 它做什么: pipreqs 会扫描您项目文件夹中的所有 Python 代码,检查代码中 import 了哪些库,然后仅仅根据这些实际用到的库来生成一个干净的 requirements.txt 文件。

  • 为什么它很棒:

    • 极简主义: 它只包含你代码中真正 import 的库,不会把你当前 conda 环境中安装了但项目没用到的其他无关库加进去。
    • 快速简单: 安装和使用都极其方便,一条命令即可搞定。
    • 无需运行环境: 它不需要预先安装任何依赖包就能分析出需要哪些依赖。
  • 如何使用:

    1. 首先,安装 pipreqs (可以直接用您 conda 环境中的 pip):
      bash
      pip install pipreqs
    2. 进入您的项目根目录:
      bash
      cd /mnt/sdb/chenmohan/VGGT-NBV
    3. 运行 pipreqs,它会自动在当前目录创建 requirements.txt 文件:
      bash
      pipreqs .
      ```        *(如果目录下已经有一个 `requirements.txt` 文件,你可以使用 `pipreqs --force .` 来强制覆盖它)*
    4. 现在,您就有了一个完整的依赖文件了。用一条命令全部安装它们:
      bash
      pip install -r requirements.txt

2. pigar:更强大的依赖分析器

  • GitHub 仓库: https://github.com/damnever/pigar

  • 它做什么: 和 pipreqs 类似,pigar 也通过分析代码来生成依赖文件。但它通常被认为功能更强大,分析更精确。例如,它能更准确地识别出 import yaml 对应的包是 PyYAML

  • 为什么它很棒:

    • 高准确度: 识别“模块名”和“包名”的对应关系非常准。
    • 信息详细: 生成的 requirements.txt 文件中会带有注释,标明每个依赖是被哪个文件所引用的。
    • 功能丰富: 提供了比 pipreqs 更多的配置选项。
  • 如何使用:

    1. 安装 pigar:
      bash
      pip install pigar
    2. 在您的项目目录下运行它:
      bash
      cd /mnt/sdb/chenmohan/VGGT-NBV
      pigar generate
    3. 它同样会生成 requirements.txt 文件,然后您就可以用 pip 来安装了:
      bash
      pip install -r requirements.txt

为什么没有工具去自动化“运行->报错->安装”的循环?

您可能会想,为什么这些工具都是分析代码,而不是直接模拟我手动操作的那个循环呢?原因如下:

  1. 效率太低: "运行-报错"的循环非常慢,每次都需要启动 Python 解释器。而静态分析可以在几秒钟内扫完成百上千个文件。
  2. 不完整: 运行代码一次可能只会触发第一个缺失的依赖。而静态分析可以一次性找出代码中所有被 import 的依赖,无论它们是否在程序的初始执行路径上。
  3. 太脆弱: 程序可能因为各种原因失败,不仅仅是 ModuleNotFoundError。自动化这个过程很容易出错。

给您的建议

  1. 首先尝试 pipreqs。它是解决您当前问题的最直接、最简单的工具。
  2. 在您的 VGGT-NBV 目录下运行 pipreqs . 来生成 requirements.txt
  3. 打开生成的 requirements.txt 文件检查一下,绝大多数情况下它是准确的。
  4. 运行 pip install -r requirements.txt 来一次性安装所有依赖。
  5. 再次尝试运行您的 python train.py。如果还有 ModuleNotFoundError,那只会是一两个 pipreqs 没能识别出来的特例,您只需手动安装这一个,并把它补充到 requirements.txt 文件里即可。

使用这些自动化工具,您就可以彻底告别那个令人头疼的手动“打地鼠”过程了。

贡献者

页面历史