ModuleNotFoundError:无法导入本地文件

时间:2018-10-11 21:21:12

标签: python-3.x

我有一个包含多个文件的模块,如下所示:

/bettermod/
├── __init__.py
├── api.py
├── bettermod.py
├── errors.py
└── loggers.py

我正在从bettermod.py导入两件事:

  • 来自API的名为api.py的类
  • 整个errors.py文件

首先,这很容易,我只需要这样做:

from .api import API

但是,在导入整个errors.py文件时,我遇到了一个问题。我正在尝试这样做:

from . import errors

根据此python documentation,它应该可以工作,但是会引发以下错误:

  File "/path/to/bettermod/bettermod.py", line 10, in <module>
    from . import errors
ModuleNotFoundError: No module named 'bettermod'

编辑:调试时,我发现__name__等于bettermod.bettermod

1 个答案:

答案 0 :(得分:0)

来自docs

  

请注意,相对导入基于当前模块的名称。

我无法确定地告诉您什么地方出了问题,但是有一种气味:bettermod程序包有一个bettermod模块。您想做from bettermod.bettermod import MyBetterClass吗?我对此表示怀疑。在Python文件中,是ARE名称空间,因此选择文件和目录名称也是一种API设计。请记住这一点。

我怀疑名称冲突掩盖了问题。尝试这个。如果您在python目录中运行bettermod并说import bettermod,则表示正在导入bettermod\bettermod.py。并且.相对于bettermod.py模块。现在尝试在python软件包目录上方的目录中运行bettermod。之所以可以使用,是因为现在.解析为bettermod软件包。

尝试:

import mymodule
mymodule.__file__

这将告诉您mymodule是什么。对于包,它将显示到__init__.py的路径。这将帮助您调整方向。还要查找PYHTONPATH以及如何使用它来确保从正确的路径导入。