Python 3:从顶级包导入模块

约翰

我有一个名为ui以下模块的简单包装结构

test/
├── app.py
├── __init__.py
└── ui
    ├── __init__.py
    └── window.py

1 directory, 4 files

window.py文件包含一个基本类:

# test/ui/window.py

class Window():
    def __init__(self):
        print("Window constructor")

在我中,app.py我有:

# test/app.py

from ui import window

def run():
    w = window.Window()

现在,在Python 3 Shell中,我应该能够app从包中导入模块,并test像下面这样运行函数(我在包的父目录中):

>>> import test.app
>>> test.app.run()

但是我收到此错误(使用Python3):

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "test/app.py", line 1, in <module>
    from ui import window
ModuleNotFoundError: No module named 'ui'

请注意,这适用于Python2.7 ...

怎么了

命运

在python 3.8中测试

# test/app.py

from .ui import window


def run():
    w = window.Window()
>>> import test.app
>>> test.app.run()
Window constructor

你必须做一个。ui的前面表示您正在使用本地文件夹。由于我一般对python 2不太了解,所以我无法向您解释其在那工作的原因,但我最大的猜测是,他们更改了如何在python 3中进行相对导入

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章