【问题标题】:How to make a list of the user-created python files that a module depends on?如何列出模块所依赖的用户创建的 python 文件?
【发布时间】:2019-09-26 15:06:00
【问题描述】:

我有兴趣使用doit 来自动化python 包的构建过程。 如果可能,我希望doit 在它所依赖的任何用户创建的源文件发生更改时重新执行任务。 据我了解,完成此操作的最佳方法是使用 file_dep 键和依赖源文件的列表,但是我在生成此列表时遇到了很多麻烦。

我尝试过使用sys.modulesinspect.getmembers(),但是这些解决方案无法处理不导入模块的导入语句,例如from x import Y,不幸的是这在我的包中很常见发展中。

我研究的另一条路线是使用snakefood 工具,它最初看起来就像我想要的那样,为给定路径中的每个文件生成文件依赖项列表。 不幸的是,这个工具似乎对 Python 3 的支持有限,因此对我的包毫无用处。

是否有人对如何在 Python 3 中获得类似 snakefood 的功能有任何见解,或者是将我的所有源代码更改为仅导入模块的唯一选择?

【问题讨论】:

  • 您可以挂钩import 以了解每个导入,甚至是已经在其他地方导入的模块。但这仅适用于您的“测试”覆盖范围,因为导入可以在函数内部(任何地方)发生。

标签: python python-3.x recursion dependencies doit


【解决方案1】:

doit tutorial 本身就是关于创建 python 模块导入图!

它使用import_deps包,类似于snakefood

请注意,对于您的用例,您需要在任务操作执行期间修改file_dep 本身。为此,您需要将task 参数传递给您的操作(如here 所述)。

【讨论】:

  • 当然!感谢您指出import_deps。似乎import_deps 几乎正是所需要的,除了我需要能够递归地应用它来查找所有依赖的python 文件。你知道import_deps 是否可以直接修改或扩展以递归地工作?
  • 我已经递归地实现了它,并与pytest-incremental中的doit集成。虽然恐怕不是直截了当...
猜你喜欢
  • 2015-08-24
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多