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

时间:2011-12-06 05:45:07

标签: python setuptools pip

我正在开发一个插件架构,需要将类似“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”传递给它。

1 个答案:

答案 0 :(得分:5)

最简单的方法是导入模块并检查其__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__))