当packagename等于filename时,为什么会出现导入错误?

时间:2016-11-29 21:36:48

标签: python

我想知道为什么当import语句的packagename等于python脚本的实际文件名时python有问题。你能解释一下吗?这总是一个愚蠢的错误。谢谢!

1 个答案:

答案 0 :(得分:0)

如果我已正确理解您的问题,那么如果它们具有相同的名称,您就会询问如何处理包和模块导入。假设您有一个模块foo.py和一个包foo/

档案foo.py

print("foo module loaded")

档案foo/__init__.py

print("foo package loaded")

档案test1.py

import foo

档案test2.py

import os, imp

def import_module(dir, name):
    """ load a module (not a package) with a given name 
        from the specified directory 
    """
    for description in imp.get_suffixes():
        (suffix, mode, type) = description
        if not suffix.startswith('.py'): continue
        abs_path = os.path.join(dir, name + suffix)
        if not os.path.exists(abs_path): continue
        fh = open(abs_path)
        return imp.load_module(name, fh, abs_path, (description))

import_module('.', 'foo')

现在运行测试:

$ python test1.py 
foo package loaded

$ python test2.py 
foo module loaded