我有一个包含多个文件的模块,如下所示:
/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
答案 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
以及如何使用它来确保从正确的路径导入。