我的项目是这样组织的:
ezrename/
├── base/
├── Images/
└── shell
ezrename、base和shell文件夹中有空的init.py文件。图像只是一个资源文件夹,没有任何内容。在
我有一个名为ezrename/base的模块/颜色.py文件,它实现Colors类。在
我有一个名为ezrename/shell的模块/baseshell.py,它实现BaseShell类并导入颜色。在
from ezrename.base import Colors
但我得到了以下错误:
^{pr2}$所以我决定试试
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
我不知道我做错了什么。有人能解释一下进口产品是如何运作的吗?还有什么地方我做得不对?在
以Python的方式,我认为我的想法是错误的。你不能像我想的那样从两个模块中导入,因为只有当模块本身没有被导入时,导入才会起作用。在
pythonic的方法是创建一个没有init.py文件的应用程序文件夹,在应用程序入口脚本中导入包,相关导入将起作用:
在EzRename中,添加一个应用程序.py公司名称:
如果您这样做,从shell和base中的类的相对导入就可以工作了。那是丢失的那块
Python导入将在项目的根目录下工作,因此子目录中模块中的任何导入都应该相对于根目录导入
因此,如果您从ezrename/中的主模块运行,则baseshell.py应该是:
from base import colors
您可以将ezrename/base添加到python路径,然后只导入颜色
例如,从ezrename/shell/baseshell.py在
相关问题 更多 >
编程相关推荐