我的项目根折叠中没有名为“xxx”的模块

2024-06-12 01:19:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我的项目是这样组织的:

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

我不知道我做错了什么。有人能解释一下进口产品是如何运作的吗?还有什么地方我做得不对?在


Tags: 模块文件项目frompyimport文件夹base
3条回答

以Python的方式,我认为我的想法是错误的。你不能像我想的那样从两个模块中导入,因为只有当模块本身没有被导入时,导入才会起作用。在

pythonic的方法是创建一个没有init.py文件的应用程序文件夹,在应用程序入口脚本中导入包,相关导入将起作用:

EzRename
└──ezrename/
    ├── base/
    ├── Images/
    └── shell

在EzRename中,添加一个应用程序.py公司名称:

import ezrename

如果您这样做,从shell和base中的类的相对导入就可以工作了。那是丢失的那块

Python导入将在项目的根目录下工作,因此子目录中模块中的任何导入都应该相对于根目录导入

因此,如果您从ezrename/中的主模块运行,则baseshell.py应该是:

from base import colors

您可以将ezrename/base添加到python路径,然后只导入颜色

例如,从ezrename/shell/baseshell.py在

import os
import sys
shell_dir = os.path.dirname(os.path.realpath(__file__))
ezrename_dir = os.path.dirname(shell_dir)
base_dir = os.path.join(ezrename_dir, "base")
sys.path.append(base_dir)
import Colors

相关问题 更多 >