1

我有以下结构:

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

4 回答 4

3

看来您正试图xbot.pycreator文件夹中运行。

这是我得到的输出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移动了几个目录并xbot.py使用 Python 的-m命令行开关运行,它告诉 Python 运行由模块名称而不是文件名指定的模块。请注意,当您使用 时-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。这个变量的值是1232。)

于 2012-07-14T21:45:11.993 回答
2

使用相对导入

from . import util
from . import settings

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

参考:

尽量远离sys.path 黑客。

于 2012-07-14T20:29:00.803 回答
1

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

from AXBot import util
from AXBot import settings
于 2012-07-14T20:23:21.103 回答
0

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

于 2012-07-14T20:25:42.500 回答