Python 3.x 干净地导入自定义模块
我想从我的子模块导入一个类,而不必使用from submodule.submodule导入类语法。相反,我只想从子模块导入类执行类似于普通Python3模块的操作 我觉得这个问题应该被回答一百万次,虽然有几个类似的问题,但没有一个能提供一个简单明了的解决方案 我正在尝试使用此设置进行最简单的测试:Python 3.x 干净地导入自定义模块,python-3.x,Python 3.x,我想从我的子模块导入一个类,而不必使用from submodule.submodule导入类语法。相反,我只想从子模块导入类执行类似于普通Python3模块的操作 我觉得这个问题应该被回答一百万次,虽然有几个类似的问题,但没有一个能提供一个简单明了的解决方案 我正在尝试使用此设置进行最简单的测试: . ├── main.py └── test ├── __init__.py └── test.py 在我的测试模块中,我有以下内容: test.py __初始值 在较高级别的mai
.
├── main.py
└── test
├── __init__.py
└── test.py
在我的测试模块中,我有以下内容:
test.py
__初始值
在较高级别的main.py中,我有以下内容:
from test import Test
Test()
当我尝试运行main.py时,我得到:
我知道我可以用from test.test import test替换main.py中的import语句,但我的理解是,uu init_uuuuuuuuy.py的要点之一是使子模块可以在包级别访问,并允许使用uuuu all_uuuuuuuuuuu从测试导入所有*,根据:
在Python3中,包内的隐式相对导入不再是
可用-仅允许绝对导入和显式相对导入
支持。此外,星形导入(例如从x导入*)仅适用于
模块级代码中允许
如果将_init__uuu.py更改为:
那么您的代码就可以工作了:
$ python3 main.py
hello
但现在它只在python3上工作,而您的原始代码只在python2上工作。
要使代码在python的两行上都能工作,我们必须使用显式相对导入:
代码执行:
$ python2 main.py
hello
$ python3 main.py
hello
ImportError: cannot import name 'Test'
from test.test import Test
__all__ = ['Test']
$ python3 main.py
hello
from .test import Test
__all__ = ['Test']
$ python2 main.py
hello
$ python3 main.py
hello