繁体   English   中英

我的项目根文件夹中没有名为“xxx”的模块

[英]No module named “xxx” in my project root folder

我的项目是这样组织的:

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

ezrename,base和shell文件夹中有empies init .py文件。 图像只是一个资源文件夹,没有任何内容。

我有一个名为ezrename / base / colors.py文件的模块,它实现了Colors类。

我有一个名为ezrename / shell / baseshell.py的模块,它实现了BaseShell类并导入了Colors。

来自ezrename.base导入颜色

但是我收到以下错误:

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

我不知道我做错了什么。 有人可以解释一下进口是如何运作的,我做得对不对?

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

因此,如果您从ezrename /中的主模块运行,那么在baseshell.py中的导入应该是:

from base import colors

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

例如来自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

通过pythonic方式,我认为我的想法是错误的。 您无法按照我的意愿从两个模块导入,因为只有在未导入模块本身的情况下,导入才能正常工作。

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

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

在EzRename中,添加application.py:

导入ezrename

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM