如何找到通过egg-link安装的python包的位置?

我正在开发一个插件架构,需要将类似“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__))
上一篇:python – setuptools和pip:最小和完整安装的选择


下一篇:在Python中,什么时候是platlib!= purelib?