目前我对python导入感到有点沮丧。我认为我老实说只记得错误并且导入错误。
我的应用程序有以下目录结构:
open_app
|- __init__.py
|- open_app.py
|- core/
| |- __init__.py
| |- data/
| | |- __init__.py
| | |- data.py
| |- settings/
| |- interface/
|- extensions/
在 init .py中,我有以下内容:
import open_app.Open_App as Open_App
if __name__ == "__main__":
main = Open_App()
input("Press a key to continue")
在open_app.py中我有以下内容:
from core import data as Data
class Open_App():
pass
在核心/ init .py中,我什么都没有。
在core / data / init .py我有以下内容:
from data import Data as Data
在core / data / data.py中,我有以下内容:
class Data():
pass
问题是当我使用IDLE运行模块时,收到以下错误消息:
Traceback (most recent call last):
File "F:\Personal\Code\Python\open_app\__init__.py", line 1, in <module>
import open_app.Open_App as Open_App
File "F:\Personal\Code\Python\open_app\open_app.py", line 1, in <module>
from core import data as Data
File "F:\Personal\Code\Python\open_app\core\data\__init__.py", line 1, in <module>
from data import Data as Data
ImportError: No module named 'data'
我只是想让导入工作。所以我决定改变
核心/数据/ init .py文件:
from core.data.data import Data as Data
哪个有效。但对我来说,这似乎不是一个很好的解决方案。我必须在所有子模块前面加上它上面的每个模块目录是没有意义的。随着项目变得更大以进行单元测试,这将非常困难。
为什么我必须为这些名字添加前缀?由于
中存在 init .py核心/数据
目录,我认为:
核心/数据/ data.py
可见且可导入。在实践中它不是。
我做错了什么?我感到非常谦卑,不得不问这些,我很抱歉这是基本的,但我提前感谢任何帮助。我一直在阅读有关导入的PEP文档,而不是单击。
提前致谢!
答案 0 :(得分:0)
如果您要在不指定完整路径的情况下将data
导入__init__.py
,则可能是您想要的相对导入:
from .data import Data
请注意,您使用的别名Data
非常不必要,因为导入的对象具有相同的名称。