gpt4 book ai didi

python - 如何跟踪 python 导入

转载 作者:IT老高 更新时间:2023-10-28 20:46:33 27 4
gpt4 key购买 nike

我在向一个非常大的应用程序添加一些新代码时遇到周期性导入问题,我正在尝试确定哪些文件最有可能导致此问题。有什么方法可以跟踪哪些文件导入哪些文件?我做了一些查找并找到了 python trace 命令,但它只是在主要的 python 库中显示了一堆事件。

我基本上是在寻找一个可以向我展示如下内容的应用:

App1 >>imports>> App2,App3.method
App2 >>imports>> App3,etc

我可以浏览我所有的文件,但我不想,这是一个大应用程序。

最佳答案

这里有一个简单(而且有点初级;-)的方法来跟踪模块名称方面的“谁在尝试导入什么”:

import inspect
import __builtin__
savimp = __builtin__.__import__

def newimp(name, *x):
caller = inspect.currentframe().f_back
print name, caller.f_globals.get('__name__')
return savimp(name, *x)

__builtin__.__import__ = newimp

例如给出(已将其保存为 tracimp.py):

$ python -c 'import tracimp; import email; import sys; import email.mime'
email __main__
sys email
email.mime email
sys __main__
email.mime __main__

如您所见,“包装”内置 __import__ 的一个特定特征是它不会因为正在导入的模块已经在 sys. modules:因为处理这个是 __import__ 的工作之一,我们的包装器会被调用为“第一次加载”两个模块只是要从 sys.modules 中获取,因为它们之前已经被导入。当您尝试诊断循环导入时,这应该非常方便(它归结为在有向图中查找循环,其边缘由两个模块名称标识 - 导入和导入器 - 这种简单的方法打印在每个输出线)。

关于python - 如何跟踪 python 导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1811095/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com