尝试从导入的脚本中导入脚本时出现“ ModuleNotFoundError”

时间:2019-06-03 00:40:24

标签: python python-importlib

我的文件夹结构:

ttsTacotron.py
Tacotron-2
|..
|tacotron|
         |train.py
         |synthetizer.py
         |...
|synthesize.py # imports hparams.py
|hparams.py
...

当我直接调用synthesize.py时,它可以正常工作,所有导入都成功处理。当我在synthesize中导入ttsTacotron.py并调用它时,它在导入synthesize的模块时失败。具体来说,导入hparams失败。

ttsTacotron.py

import fire
import sys
import os

import importlib  
foobar = importlib.import_module("Tacotron-2.synthesize")

所讨论的Tacotron文件夹为this repository,但该问题不太可能是特定于此的。

注释:我使用importlib处理子文件夹中的-。由于各种原因,无法真正重命名。

我的目标:能够调用synthetize的方法并能够从根文件夹中的脚本导入tacotron模块。

1 个答案:

答案 0 :(得分:1)

这是因为,当运行ttsTacotron.py时,Python会在包含ttsTacotron.py的目录(和系统模块目录中,与此处无关)中查找所有非相对导入的模块。 hparams.pyTacotron-2目录中。最简单的解决方法可能是将Tacotron-2添加到要在其中查找模块的目录列表中。这也消除了使用importlib的需要。

import sys
sys.path.insert(1, 'Tacotron-2')

import synthesize as foobar