获取函数导入路径

2024-04-20 12:01:24 发布

您现在位置:Python中文网/ 问答频道 /正文

from pack.mod import f

如何从对象获取有关导入的信息-'pack.mod'

我可以用f.__module__得到它 但是如果在我得到这个属性的模块(f.__module__)中的函数def返回'__main__'。但我需要真正的路径-'pack.mod'

我找到了这个方法来获取这些信息:

inspect.getmodule(f).__file__

然后我可以从sys.path子开始路径,替换.上的/,得到类似-'pack.mod'的路径 但可能存在一些更方便的方式吗?


Tags: 模块对象方法函数fromimport路径信息
2条回答

根据inspect.py's sources,内部inspect.getmodule(f)所做的基本上是sys.modules.get(object.__module__)——我不会直接调用使用该代码“更方便”,尽管(除了“基本”部分,inspect有很多有用的角案例捕捉和更正)。

为什么不直接调用inspect.getsourcefile(f)

编辑:在两行之间读取,操作人员似乎试图执行以下操作

python /foo/bar/baz/bla.py

bla.py(因此作为__main__运行)中,确定“一个不同的主脚本可以使用什么fromimport语句从我内部导入此函数?”。

问题是,问题是不适定的,因为可能没有任何可用的路径(没有任何东西可以保证当前主脚本的路径在sys.path以后运行不同的主脚本时位于sys.path),是的,但在它出现之前还有/fee/fie/foo,一个完全不相关的文件/fee/fie/foo/bla.py也存在——等等)。

无论这种发现尝试的目的是什么,我建议找到一种替代体系结构——例如,实际执行from baz.bla import f的体系结构(正如OP在问题开始时所说的那样),以便f.__module__被正确设置为baz.bla

您需要来自__module____name__属性:

In [16]: import inspect
In [17]: inspect.getmodule(MyObject).__name__
Out[17]: 'lib.objects.MyObject'

相关问题 更多 >