ImportError: No module named 'util'

ImportError: No module named 'util'

我知道这个问题有很多变体,但我找不到和我一样的。当我尝试导入模块 illustris_python 时出现错误 ImportError: No module named 'util' 模块 util 位于需要它的模块 snapshot.py 下面的目录中,所以我很困惑为什么 python 看到一个模块,但看不到另一个。 我在下面包含了导入调用和回溯。

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.

IPython 3.0.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
%guiref   -> A brief reference about the graphical user interface.

In [1]: import illustris_python as il
Traceback (most recent call last):

  File "<ipython-input-1-ff06d24b4811>", line 1, in <module>
    import illustris_python as il

  File "C:\WinPython-64bit-3.4.3.2\python-3.4.3.amd64\lib\site-     packages\illustris_python\__init__.py", line 3, in <module>
    from . import *

  File "C:\WinPython-64bit-3.4.3.2\python-3.4.3.amd64\lib\site- packages\illustris_python\snapshot.py", line 6, in <module>
    from util import partTypeNum

ImportError: No module named 'util'


In [2]: 

查看 the BitBucket repo,我很确定问题在于此代码仅 Python 2.x。有人已经为最终的端口清理它,但还有更多工作要做。

这个特定的错误是 near the top of snapshot.py:

from util import partTypeNum

在 Python 2.6 中,这是一个 relative 导入(它是 PEP 328 的 "deprecated",但我很确定你不默认情况下实际上会收到警告......),因此它首先在与 snapshot.py 相同的包中查找,在那里找到 util.py,然后再查看你的 sys.path.

在 Python 3.4 中,它是一个 absolute 导入,所以它只在你的 sys.path 中查找(好吧,它调用你的顶级模块查找器,但通常这意味着查看您的 sys.path),但那里没有 util.py

如果您要自己完成将此示例代码移植到 3.x,只需将其更改为显式相对导入:

from .util import partTypeNum

现在我已经解决了你的问题。我所做的是在 "illustris_python" 方向打开终端。希望对你有帮助。