Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 干净地导入自定义模块_Python 3.x - Fatal编程技术网

Python 3.x 干净地导入自定义模块

Python 3.x 干净地导入自定义模块,python-3.x,Python 3.x,我想从我的子模块导入一个类,而不必使用from submodule.submodule导入类语法。相反,我只想从子模块导入类执行类似于普通Python3模块的操作 我觉得这个问题应该被回答一百万次,虽然有几个类似的问题,但没有一个能提供一个简单明了的解决方案 我正在尝试使用此设置进行最简单的测试: . ├── main.py └── test ├── __init__.py └── test.py 在我的测试模块中,我有以下内容: test.py __初始值 在较高级别的mai

我想从我的子模块导入一个类,而不必使用from submodule.submodule导入类语法。相反,我只想从子模块导入类执行类似于普通Python3模块的操作

我觉得这个问题应该被回答一百万次,虽然有几个类似的问题,但没有一个能提供一个简单明了的解决方案

我正在尝试使用此设置进行最简单的测试:

.
├── 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