我有以下结构:
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
谢谢。
答案 0 :(得分:2)
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
。请更新您的问题