没有名为 "data_utils" 的模块...但是已下载
No module named "data_utils"...But it is downloaded
所以,我遇到了一个简单的错误,
"No module named "data_utils"
尝试将其导入 python 程序时。所以我认为它一定没有下载并花了大约 20 分钟来确保正确下载。结果一直都很好,data_utils.py
文件位于 utils 文件夹中。
我真的被卡住了,因为我看到它就在那里,但它根本不会导入。我在 __init__.py
文件之后查找了 .bin,但它们似乎没问题。任何帮助将不胜感激。谢谢!
从您的评论中推断出答案是:
这些文件必须位于同一目录/和某些子目录中,以便像 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 这样的模块导入是否必须在同一目录中?
简答
没有
长答案:
当您安装 scipy
和 numpy
等(您从 pip 安装或使用 sudo 安装的软件包)时,它们会将自己(它们的位置)添加到 PYTHONPATH
,因此您不需要必须将它们与您的项目代码放在同一目录中。
您想要全局使用的模块必须添加到您的 PYTHONPATH 中。 Python 在其正在执行的文件的目录和子目录中以及在 PYTHONPATH
.
中(大致)搜索模块
如果你想全局导入你自己的模块
即,如果您想在任何地方使用 data_utils.py
,假设您在 linux 上使用 bash,并假设您在名为 [的目录中有 data_utils.py =25=]:
将 __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
并且可以通过任何项目代码导入。
所以,我遇到了一个简单的错误,
"No module named "data_utils"
尝试将其导入 python 程序时。所以我认为它一定没有下载并花了大约 20 分钟来确保正确下载。结果一直都很好,data_utils.py
文件位于 utils 文件夹中。
我真的被卡住了,因为我看到它就在那里,但它根本不会导入。我在 __init__.py
文件之后查找了 .bin,但它们似乎没问题。任何帮助将不胜感激。谢谢!
从您的评论中推断出答案是:
这些文件必须位于同一目录/和某些子目录中,以便像 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 这样的模块导入是否必须在同一目录中?
简答 没有
长答案:
当您安装 scipy
和 numpy
等(您从 pip 安装或使用 sudo 安装的软件包)时,它们会将自己(它们的位置)添加到 PYTHONPATH
,因此您不需要必须将它们与您的项目代码放在同一目录中。
您想要全局使用的模块必须添加到您的 PYTHONPATH 中。 Python 在其正在执行的文件的目录和子目录中以及在 PYTHONPATH
.
如果你想全局导入你自己的模块
即,如果您想在任何地方使用 data_utils.py
,假设您在 linux 上使用 bash,并假设您在名为 [的目录中有 data_utils.py =25=]:
将 __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
并且可以通过任何项目代码导入。