首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从正在导入的模块中获取导入模块

从正在导入的模块中获取导入模块
EN

Stack Overflow用户
提问于 2022-11-08 06:22:35
回答 1查看 33关注 0票数 0

例如,我有两个.py文件module1module2

module2使用import语句导入module1

我希望在module1中有一些方法来检测(从module1本身)哪些模块正在导入它。在这种情况下,module2将导入它。

我所做的:,如果我从module2导入module1,我看到module1具有__loader____spec__全局vars。__loader__包含<class '_frozen_importlib_external.SourceFileLoader'>__spec__包含<class '_frozen_importlib.ModuleSpec'>__spec__.loader__loader__相同。

如果我写

代码语言:javascript
运行
复制
print(__loader__.path)

module1内部,它给出了module1的完整路径。

我想要的东西:,我希望在module1中有一些代码来获得module2的路径。(不是module1 __loader__.path给出的路径)。

EN

回答 1

Stack Overflow用户

发布于 2022-11-08 07:26:15

Python中的导入实际上是对importlib中函数的调用,因此您只需要通过检查调用堆栈中的框架来获取调用者在importlib中调用函数的信息。

但是,由于导入系统的实现细节不同,调用堆栈中的实际调用方的框架在不同的Python版本之间有所不同,所以最好迭代调用堆栈并过滤掉importlib中的内部调用,这些调用可以通过尖括号中的文件名来标识。

找到文件名不以角括号开头的帧后,使用inspect.getmodule获取其模块信息。

代码语言:javascript
运行
复制
import inspect

print(next(inspect.getmodule(f[0]).__file__
    for f in inspect.stack()[1:] if not f.filename.startswith('<')))

演示:https://replit.com/@blhsing/LameAgonizingPrinters

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74356449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档