在我的项目的根文件夹命名为“XXX”

问题描述:

我的项目中没有任何模块的组织是这样的:在我的项目的根文件夹命名为“XXX”

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

有空瓶在ezrename,底座和外壳文件夹初始化 .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的方式,我认为我的想法是错误的。你不能像我想要的那样从两个模块导入,因为只有当模块本身没有导入时,导入才会起作用,做我想要的是不可能的。

的Python的方式将没有一个初始化创建一个应用程序文件夹 .py文件,在应用入口脚本导入的包和相关进口将工作:

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

在EzRename,加application.py:

import ezrename

如果这样做,shell和base中的类的相对导入将起作用。这是缺少的一块

Python导入将努力形成你的项目的根,所以在模块的任何进口子目录应该因此,如果你从baseshell在ezrename /然后导入主模块运行到

相对进口。 PY应该是:

from base import colors

+0

在反引号中包含你的代码片段'将它们格式化 - 使读者更清楚。 – drjimmie1976

+0

感谢您的提示,将尽。 – Jeroanan

+0

谢谢你的回答。 –

可以ezrename /碱添加到Python的路径,然后只需要导入颜色

如from 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 
+0

谢谢你的回答。 –