告诉特定目录(包)中的模块要求

Tell the module requirements in a particular directory (package)

在我的办公室,我们的代码目录结构非常复杂。

我们拥有的东西之一是一个 libs 模块,用于删除 "common" 我们大型应用程序(或一组应用程序......)的其他部分使用的东西......它们都生活在一个共同的目录)。

libs/ 目录中的代码需要安装某些软件包才能运行。在所述 libs/ 目录中,我们有一个 requirements.txt 文件,该文件 应该 列出其中的事物(事物是 Python 代码)工作所需的依赖项.我们一直在 手动 漂亮地填充 requirements.txt 文件,跟踪“如果这个 .py 文件使用这个模块,我们应该将它添加到需求文件中" 所以几乎可以肯定,到目前为止我们已经忘记了添加一些必需的模块。

因为我们的结构很复杂(有些部分使用 pipenv,其他部分有自己的 requirements.txt...)很难知道所需的模块是否最终会安装与否。

所以我想确保这个 libs/ 目录(咳咳... module )在其 [=18= 中列出了所有依赖项].

这可能吗?理想情况下是 "run this command passing /libs/ as an argument, it'll scan the directory and tell you what packages are needed by the py(s) found in it"

提前谢谢你。

不幸的是,python直到运行时才知道它的依赖关系是否得到满足。 requirements.txt只是pip等工具的辅助文件,需要手动更新

也就是说,你可以

  • 使用os模块递归获取文件夹中所有*.py个文件的列表
  • 解析每行格式为 import aaa.bbbfrom aaa import bbb
  • 保留一组导入

然而,即使在那种情况下,导入模块的名称与您需要传递给 pip 的名称不相同(例如,import yaml 需要pyyaml in requirements.txt), 但至少它可以提示缺少什么。