没有名为" data_utils" ...的模块,但它已下载

时间:2017-03-17 22:11:27

标签: python scipy tensorflow keras recurrent-neural-network

所以,我遇到了一个简单的错误,

  

"没有名为" data_utils"

的模块

尝试将其导入python程序时。所以我认为它一定不能下载并花费20分钟试图确保正确下载。事实证明它一直很好,data_utils.py文件位于utils文件夹中。

我真的被卡住了,因为我看到它就在那里,但它根本不会导入。我在__init__.py文件之后找了一个.bin但看起来好像没问题。任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

从你的评论中推断出答案是:

文件必须位于同一目录/和某些子目录中,以便导入import data_utils才能正常工作。

有一些方法可以解决这个问题,但首先要尝试保持简单。

例如:

给出这样的目录结构:

| --main.py
| --data_utils.py
| --train.py

并假设您在data_utils中有一个函数remove_punctuation

你可以使用导入:

from data_utils import remove_punctuation

或者你可以用:

导入所有函数(和/或data_utils中的类)
from data_utils import *

或者您可以使用

导入data_utils
import data_utils

# use remove_punctuation
data_utils.remove punctuation

目录结构也可以是:

|--main.py
|--bar
   |--foo
|--src
   |--train.py

您可以使用

导入remove_punctuation

与上面相同的语义使用点表示法限定目录:

from bar.foo import foo

编辑:像scipy一样的模块导入必须在同一个目录中吗?

简短回答 没有

答案很长

当您安装scipynumpy等(您从pip或使用sudo安装的软件包)时,他们会将自己(他们的位置)添加到PYTHONPATH,因此您不必将它们放在与项目代码相同的目录中。

您要全局使用的模块必须添加到PYTHONPATH中。 Python(大致)在正在执行的文件的目录和子目录中以及PYTHONPATH中搜索模块。

如果您想要全局导入自己的模块

即如果你想在任何地方使用data_utils.py,你可以假设你在linux上使用bash并假设你在名为data-utils的目录中有data_utils.py:

__init__.py添加到data-utils,因此您的目录结构如下所示:

|--data-utils
  |--__init__.py
  |--data_utils.py

然后将此行添加到〜/ .bashrc:

export PYTYHONPATH=$PYTHONPATH:/path/to/data-utils

data-utils(以及data_utils.py扩展名)永久添加到PYTHONPATH,可以通过任何项目代码导入。