ImportError:没有名为utils的模块

A.M*_*iev 11 python import module python-module python-2.7

我正在尝试导入实用程序文件,但只有当我通过脚本运行代码时才会遇到奇怪的错误.

当我运行test.py时

location:/home/amourav/Python/proj/test.py

码:

import os
os.chdir(r'/home/amourav/Python/')
print os.listdir(os.getcwd())
print os.getcwd()
from UTILS import *
Run Code Online (Sandbox Code Playgroud)

输出是:

['UTILS_local.py','UTILS.py','proj','UTILS.pyc']

/家庭/ amourav/Python的

回溯(最近一次调用最后一次):文件"UNET_2D_AUG17.py",第11行,来自UTILS import*ImportError:没有名为UTILS的模块

但是当我通过bash终端运行代码时,它似乎工作正常

bash-4.1$ python
>>> import os
>>> os.chdir(r'/home/amourav/Python/')
>>> print os.listdir(os.getcwd())
Run Code Online (Sandbox Code Playgroud)

['UTILS_local.py','UTILS.py','proj','UTILS.pyc']

>>> from UTILS import *
Run Code Online (Sandbox Code Playgroud)

等等等等 - 等等等等

我在Linux机器上运行Python 2.7.10

Use*_*ser 7

您的项目如下所示:

+- proj
|  +- test.py
+- UTILS.py
+- ...
Run Code Online (Sandbox Code Playgroud)

如果您想导入UTILS.py,可以选择:

(1)在test.py中添加sys.path的路径

import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
# now you may get a problem with what I wrote below.
import UTILS
Run Code Online (Sandbox Code Playgroud)

(2)创建一个包(仅限导入)

Python
+- proj
|  +- test.py
|  +- __init__.py
+- UTILS.py
+- __init__.py
+- ...
Run Code Online (Sandbox Code Playgroud)

现在,您可以在test.py中编写此代码,如果您import Python.proj.test:

from .. import UTILS
Run Code Online (Sandbox Code Playgroud)

错误的答案

我有几次这个错误.我想,我记得.

修复:不要运行test.py,运行./test.py.

如果你看一下sys.path,你可以看到里面有一个空字符串,它是执行文件的路径.

  • test.py添加''sys.path
  • ./test.py添加'.'sys.path

"."我想,进口只能从中进行.

  • 你能详细说明为什么会这样吗? (3认同)