[英]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.