python - 我的项目根文件夹中没有名为 "xxx"的模块

标签 python python-3.x import

我的项目是这样组织的:

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/

相关文章:

python - 为什么需要 "import logging"和 "import logging.config"?

python - 如何使用脚本重新创建 IPython 的 '--pylab' 选项的效果?

python - 总结数组内所有不同形状的 numpy 子数组的所有值

python - 浮点比较不适用于 pandas groupby 输出

python - df.append() with dicts 将 bool 值转换为 1 和 0

python - 如何在子类中调用父类?

python - pip 无法正确安装软件包 : Permission denied error

python - Netmiko send_config_set - 解析响应 - 检测错误?

python - 运行时错误 : lost sys. 标准输出

python - Django 休息 : The view does not want to import