Python 导入子模块前缀
Python Import Submodule Prefix
我现在对 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
在core/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'
我只是想让导入工作。所以我决定改变
core/data/init.py文件到:
from core.data.data import Data as Data
哪个有效。但对我来说,这似乎不是一个很好的解决方案。必须在所有子模块前面加上每个模块目录的前缀对我来说没有意义。随着项目变大,执行单元测试将变得非常困难。
为什么我必须在名字前加上这样的前缀?由于 init.py 存在于
core/data
目录,我认为应该是:
core/data/data.py
将是可见的和可导入的。实际上不是。
我做错了什么?不得不问这些问题我感到非常谦虚,很抱歉这是基本问题,但我很感激提前提供的任何帮助。我一直在阅读有关导入的 PEP 文档,但有些东西没有点击。
提前致谢!
如果您要在不指定完整路径的情况下将 data
导入 __init__.py
,您可能需要相对导入:
from .data import Data
请注意,您使用的别名 Data
完全没有必要,因为导入的对象具有相同的名称。
我现在对 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
在core/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'
我只是想让导入工作。所以我决定改变
core/data/init.py文件到:
from core.data.data import Data as Data
哪个有效。但对我来说,这似乎不是一个很好的解决方案。必须在所有子模块前面加上每个模块目录的前缀对我来说没有意义。随着项目变大,执行单元测试将变得非常困难。
为什么我必须在名字前加上这样的前缀?由于 init.py 存在于
core/data
目录,我认为应该是:
core/data/data.py
将是可见的和可导入的。实际上不是。
我做错了什么?不得不问这些问题我感到非常谦虚,很抱歉这是基本问题,但我很感激提前提供的任何帮助。我一直在阅读有关导入的 PEP 文档,但有些东西没有点击。
提前致谢!
如果您要在不指定完整路径的情况下将 data
导入 __init__.py
,您可能需要相对导入:
from .data import Data
请注意,您使用的别名 Data
完全没有必要,因为导入的对象具有相同的名称。