python模块导入错误

时间:2012-07-14 20:08:21

标签: python import module

我有以下结构:

AXBot:
    __init__.py
    bot.py
    util.py
    settings.py
    creator
        __init__.py
        xbot.py

问题是我无法在'xbot.py'中导入'util'模块,因为python以'ImportError结尾:没有名为util的模块'...我该如何解决?

PS:我使用以下代码导入:

import util
import settings

谢谢。

4 个答案:

答案 0 :(得分:2)

使用relative importing

from . import util
from . import settings

我会建议更改您的文件夹层次结构,这对我来说看起来更干净。还要检查你的PYTHONPATH,它通常应该按你的方式工作。

参考文献:

尝试从sys.path hacks中远离

答案 1 :(得分:1)

我认为命名空间不正确。从xbot.py,尝试使用此导入命令

from AXBot import util
from AXBot import settings

答案 2 :(得分:1)

您似乎正在尝试从xbot.py文件夹中运行creator

这是xbot.py包含import util

的输出结果
C:\Users\Luke\Python stuff\AXBot\creator>xbot.py
Traceback (most recent call last):
  File "C:\Users\Luke\Python stuff\AXBot\creator\xbot.py", line 4, in <module>
    import util
ImportError: No module named util

这是xbot.py包含from . import util

的输出结果
C:\Users\Luke\Python stuff\AXBot\creator>xbot.py
Traceback (most recent call last):
  File "C:\Users\Luke\Python stuff\AXBot\creator\xbot.py", line 3, in <module>
    from . import util
ValueError: Attempted relative import in non-package

我也会使用from .. import util而不是from . import util来解决后一个错误。

如果从包含它的目录运行xbot.py,Python无法判断它是否在包层次结构中运行。它认为xbot.py不在包中。

我用util替换了试图导入from AXBot import util的行,移动了几个目录并使用Python的xbot.py命令行开关运行-m Python运行模块名称而不是filename指定的模块。请注意,使用-m时,会传入模块的完全限定名称,包括包层次结构,但不包含文件扩展名.py,因为这不是名称的一部分模块:

C:\Users\Luke\Python stuff\AXBot\creator>cd ..\..

C:\Users\Luke\Python stuff>python -m AXBot.creator.xbot
1232

如果我使用import AXBot.util as util代替from AXBot import util,我会得到相同的输出。

(我没有运行您的代码,因此我在util.py中放置了一个变量,并尝试从xbot.py内打印其值。此变量的值为{{1} }。)

答案 3 :(得分:0)

你在哪里是最重要的问题!据此,你使用import。请更新您的问题