从不同的文件夹级别导入 class - Python

Import a class from different folder levels - Python

我正在编写一个序列到序列模型,我有以下目录结构

MyProject/
     models/ 
          - __init__.py
          - Encoder.py
     train/
          - __init__.py
          - Train.py

虽然在 Train.py 中,但我无法从 Encoder.py 导入 类 BiDirectionalEncoder,尽管我尝试使用以下语法

from models.Encoder import BiDirectionalEncoder 

对于上面的行,我得到错误“ ModuleNotFoundError:没有名为 'models'"

的模块
from ..models.Encoder import BiDirectionalEncoder

最后一行出现错误 "ImportError: attempted relative import with no known parent package"

有什么好的方法可以解决这个问题吗?我不想使用任何 sys.path.append() 来强制添加路径 我在 Spyder 4.0.1 中使用 Python 3.7.6 谢谢!

在同一个包中,您可以进行相对导入,但由于您要离开当前包,因此需要进行绝对导入。

from MyProject.models.Encoder import BiDirectionalEncoder 

如果您正在使用任何 IDE(例如 pycharm),您需要将(我的项目)设置为源引导目录 否则你需要在 settings.py

中检查你的 BASE_DIR

然后您就可以导入模型了。

从 models.Encoder 导入双向编码器

是的,如果你想从下面的其他环境访问模块是 link 了解访问和共享模块的方法。

python module:- importing(accessing) creating and sharing

希望这能解决您的问题。