python模块导入

2024-04-26 13:27:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下结构:

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

问题是,我无法在“xbot.py”中导入“util”模块,因为python以“importTerror:没有名为util的模块”结尾。。。我该怎么解决?

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

import util
import settings

谢谢你。


Tags: 模块代码pyimportsettingsinitbotutil
3条回答

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

这是我用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不在包中。

我用from AXBot import util替换了试图导入util的行,向上移动了几个目录,并使用Python的-m命令行开关运行xbot.py,该开关告诉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。)

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

from AXBot import util
from AXBot import settings

使用relative importing

from . import util
from . import settings

不过,我还是建议更改你的文件夹层次结构,这样看起来更清晰。还要检查你的Python,它应该正常工作的方式,你这样做。

参考文献:

尽量远离sys.path hacks。

相关问题 更多 >