我的项目是这样组织的:
ezrename/
├── base/
├── Images/
└── shell
ezrename、base 和 shell 文件夹中有空的 init.py 文件。图片只是一个资源文件夹,什么都没有。
我有一个名为 ezrename/base/colors.py 的模块文件,它实现了 Colors 类。
我有一个名为 ezrename/shell/baseshell.py 的模块,它实现了 BaseShell 类并导入了 Colors。
from ezrename.base import Colors
但是我得到以下错误:
Traceback (most recent call last):
File "/home/devaneando/Development/ezrename/shell/baseshell.py", line 6, in <module>
from ezrename.base import Colors
ImportError: No module named 'ezrename'
所以我决定试试
from ..base import Colors
得到
Traceback (most recent call last):
File "/home/devaneando/Development/ezrename/shell/baseshell.py", line 6, in <module>
from ..base import Colors
SystemError: Parent module '' not loaded, cannot perform relative import
我不知道我做错了什么。有人可以解释导入的工作原理以及我做错了什么吗?
最佳答案
按照pythonic的方式,我认为我的想法是错误的。您不能像我想的那样从两个模块导入,因为导入只有在模块本身未被导入时才有效,而我想做的事情是不可能的。
pythonic 方法是创建一个没有 init.py 文件的应用程序文件夹,在应用程序入口脚本中导入包,相关导入将起作用:
EzRename
└──ezrename/
├── base/
├── Images/
└── shell
在EzRename中,添加一个application.py:
import ezrename
如果您这样做,从 shell 和 base 中的类的相对导入将起作用。那是缺失的部分
关于python - 我的项目根文件夹中没有名为 "xxx"的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39541295/