我试图为python源文件解析一个给定的路径,导入每个文件和DoStuff™ 到每个导入的模块。在
def ParsePath(path):
for root, dirs, files in os.walk(path):
for source in (s for s in files if s.endswith(".py")):
name = os.path.splitext(os.path.basename(source))[0]
m = imp.load_module(name, *imp.find_module(name, [root]))
DoStuff(m)
上面的代码可以工作,但无法识别包ValueError: Attempted relative import in non-package
我的问题基本上是,如何告诉imp.load_module
给定模块是包的一部分?在
我也有同样的问题。好消息是有一种方法可以做到这一点,但是必须结合使用imp和importlib。下面是一个示例:
这将允许子模块使用相对模块路径导入,因为我们已经加载了父包,并且importlib已正确加载子模块,以了解它相对于什么被导入。在
我相信这个解决方案只对我们这些困在python2.*中的人是必要的,但是需要有人来证实这一点。在
不能直接告诉Importer Protocol方法
load_module
给定的模块是包的一部分。取自PEP 302 New Import Hooks然后,必须模拟内置导入的功能,并在加载子模块之前加载父包。在
函数
imp.find_module
总是采用一个没有点的简单模块名,但是imp.load_module
的文档说明所以你可以试试这个:
相关问题 更多 >
编程相关推荐