首页 文章

Python循环相对导入工作在python 3但不是python 2

提问于
浏览
1

这适用于python 3,但在python 2(版本2.7)中发出ImportError:

Shell命令:

$> python main.py

main.py

import mymodule

mymodule.KlassX().talk_klass_y()
mymodule.KlassY().talk_klass_x()

MyModule的/ __ init__.py

from .x import KlassX
from .y import KlassY

MyModule的/ x.py

from . import y  # circular import

def KlassX:
    def talk(self):
        print('Im in KlassX')

    def talk_klass_y(self):
        y.KlassY().talk()

MyModule的/ y.py

from . import x  # circular import

def KlassY:
    def talk(self):
        print('Im in KlassY')

    def talk_klass_x(self):
        x.KlassX().talk()

您可能已经注意到,我已将循环导入写为相对导入,因为建议对包内的导入(PEP-0328)执行此操作 .

我也试过绝对进口:

from mymodule import y  # in mymodule/x.py
from mymodule import x  # in mymodule/y.py

但这只适用于python 3而不适用于python 2(因为相同的ImportError) .

我可以在python 2中使用它的唯一方法是使用相对导入,使用以下未经推荐的表示法:

import y  # in mymodule/x.py
import x  # in mymodule/y.py

我真的不喜欢它,因为“import somemodule”作为相对导入仅适用于python 2,因为在python 3中它总是被强制为绝对导入 . 我不明白为什么这个符号:

from mymodule import x
# or
from . import x

在python 2和3中都被接受,表现不同 .

任何线索?我应该如何在python 2中正确执行循环导入?

1 回答

相关问题