我有一个包含多个文件的模块,结构如下:
/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文档,它应该可以工作,但是它引发了以下错误:
File "/path/to/bettermod/bettermod.py", line 10, in <module>
from . import errors
ModuleNotFoundError: No module named 'bettermod'
型
编辑:调试时发现__name__
等于bettermod.bettermod
2条答案
按热度按时间vm0i2vca1#
来自文档:
请注意,相对汇入是以目前模块的名称为基础。
我不能肯定地告诉你哪里出了问题,但是有一个味道:
bettermod
包有一个bettermod
模块。你想做from bettermod.bettermod import MyBetterClass
?我怀疑。在Python中,文件是命名空间,所以选择文件和目录名也是一个API设计。记住这一点。我怀疑这个问题是因为名称恩怨而造成的。请尝试这个方法。如果您在
bettermod
目录中执行python
,并指定import bettermod
,您会汇入bettermod\bettermod.py
。而且.
是相对于bettermod.py
模块。现在请尝试在bettermod
套件目录上方的目录中执行python
。它会正常运作,因为现在.
会解析为bettermod
封装的最大容量。试试看:
字符串
这将告诉你
mymodule
是什么。对于软件包,它将显示__init__.py
的路径。这将帮助你确定自己的方向。同时查找PYHTONPATH
以及如何使用它来确保你从正确的路径导入。u91tlkcl2#
这里是很好的教程如何修复https://fortierq.github.io/python-import/
下一个文件结构
字符串
对我来说,在
script.py
的下一个建筑工作型