模块导入 Python 3.6 上的 ModuleNotFoundError 和 ImportError

Posted

技术标签:

【中文标题】模块导入 Python 3.6 上的 ModuleNotFoundError 和 ImportError【英文标题】:ModuleNotFoundError & ImportError on Module Import Python 3.6 【发布时间】:2018-10-10 13:32:00 【问题描述】:

我搜索了很多问题,找到了很多答案,但似乎没有任何问题。

我在一个名为 test 的文件夹下设置了两个文件 config.pytest.py

config 包含代码:

class Config:
    def __init__(self, name):
        self.name = name

虽然测试有:

try:
    # Trying to find module in the parent package
    from . import config
    print(config.debug)
    del config
except ImportError:
    print('Relative import failed')

try:
    # Trying to find module on sys.path
    import config
    print(config.debug)
except ModuleNotFoundError:
    print('Absolute import failed')

这是根据stack 答案上的答案供应商汇总的。

不幸的是,当我尝试直接调用它from config import Config 时,我遇到了两个错误,我得到了 ModuleNotFoundError

我真的迷失了这个,不知道从这里去哪里。

使用 Python 3.6、atom.io 作为我的 IDE。

【问题讨论】:

您的测试文件夹是否包含__init__.py 文件? 不,我相信 python 3.3+ 不再需要它了? 如果您想将您的文件夹视为一个包,则需要它。如文档中所述:__init__.py 文件需要使 Python 将目录视为包含包;这样做是为了防止具有通用名称(例如字符串)的目录无意中隐藏模块搜索路径中稍后出现的有效模块。在最简单的情况下,__init__.py 可以只是一个空文件....之后您可以简单地执行from test import config。在此处阅读更多信息docs.python.org/3/tutorial/modules.html 还是没有运气,我已经在目录级别的空文件中添加了,但同样的错误正在弹出。似乎坚持未找到模块错误 即使添加了 init.py,您仍然收到 ImportError 和 ModuleNotFoundError?您能否更新您的帖子以显示您如何添加 init.py 以及更新的导入代码? 【参考方案1】:
#test.py

class Test:
    try:
        # Trying to find module in the parent package
        from . import config
        print(config.Config.debug)
        del config
    except ImportError:
        print('Relative import failed')

    try:
        # Trying to find module on sys.path
        import config
        print(config.Config.debug)
    except ModuleNotFoundError:
        print('Absolute import failed')


#config.py

class Config:
    debug = True
    def __init__(self, name):
        self.name = name

#config.py

在这个文件中,出现错误是因为没有变量 debug = True

class Config:
    debug = True
    def __init__(self, name):
        self.name = name

#test.py

在此文件中,出现错误是因为您正在执行文件导入的打印并尝试以直接方式访问变量,也就是说,您需要 3 个步骤... 导入、类、变量 >>> config.Config.debug

print(config.Config.debug)

希望对你有帮助???

【讨论】:

以上是关于模块导入 Python 3.6 上的 ModuleNotFoundError 和 ImportError的主要内容,如果未能解决你的问题,请参考以下文章

python 3.6 on win 10 editdistance模块无法导入(DLL加载失败问题)

找不到 Python 3.6 模块:Folium

Python 3.6 AttributeError:模块“statsmodels”没有属性“compat”

通过site-packages中安装的版本导入模块的开发版本

python导入模块时的执行顺序

Python导入模块-Import