我正在开发一个插件架构,需要将类似“foo.bar”的包名称转换为代码所在的绝对路径. imp.find_module似乎做我想要的,除非有问题的代码是通过egg-link安装的(通过’pip install develop’安装).
如果有两个模块foo.bar和foo.bar2通过egg-links安装(并且位于完全独立的文件系统位置,如/ home / bob / foo / bar和/ home / alice / foo / bar2),find_modules不起作用,因为我查找包“foo”并获取foo / bar的位置,但不是foo / bar2.
有人有替代功能的建议吗? find_modules不接受分层名称,因此我不能只将“foo.bar2”传递给它.
解决方法:
最简单的方法是导入模块并检查其__file__属性:
import os
import foo.bar
print(os.path.abspath(foo.bar.__file__))
对于动态导入:
import os
import sys
module_name = 'foo.bar'
__import__(module_name)
print(os.path.abspath(sys.modules[module_name].__file__))