关于import:python模块导入错误

python module importing error

我有以下结构:

1
2
3
4
5
6
7
8
AXBot:
    __init__.py
    bot.py
    util.py
    settings.py
    creator
        __init__.py
        xbot.py

问题是我无法在"xbot.py"中导入"util"模块,因为python以"importerror:no module named util"结尾…我如何解决?

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

1
2
import util
import settings

谢谢您。


使用相对导入

1
2
from . import util
from . import settings

不过,我还是建议更改您的文件夹层次结构,这对我来说更清晰。还要检查一下你的Python,它应该像你做的那样正常工作。

参考文献:

  • PET-0328
  • 如何导入上面目录的python类
  • 从父目录导入

尽量远离sys.path黑客。


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

这是我用包含import utilxbot.py得到的输出:

1
2
3
4
5
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

这是我用包含from . import utilxbot.py得到的输出。

1
2
3
4
5
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不在包装内。

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

1
2
3
4
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


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

1
2
from AXBot import util
from AXBot import settings


你在哪里是最重要的问题!根据这一点,您可以使用import。请更新您的问题