Python: кросс-импорт модулей не выполняется - PullRequest
0 голосов
/ 12 мая 2019

Сбой импорта модуля при кросс-импорте.

Мой prog.py файл:

import sys
sys.path.append(".")
from m1 import f1

И m1.py:

from m2 import f2

def f1():
  pass

И m2.py:

from m1 import f1

def f2():
  pass   

Мой модуль m1 должен использовать некоторые функции в модуле 2, а модуль 2 должен использовать некоторые функции в модуле 1, поэтому я импортирую их, как описано выше.Но Python (python3) не позволяет мне сделать это.Вот исключение:

Traceback (most recent call last):
  File "prog.py", line 3, in <module>
    from m1 import f1
  File "/temp/m1.py", line 1, in <module>
    from m2 import f2
  File "/temp/m2.py", line 1, in <module>
    from m1 import f1
ImportError: cannot import name 'f1'

Я знаю, что это перекрестный импорт, но как решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 12 мая 2019

Вы можете переместить кросс-импорт в конец файла, чтобы все, что вы экспортировали, уже было определено:

и m1.py:

def f1():
  pass

from m2 import f2

и m2.py:

def f2():
  pass

from m1 import f1
0 голосов
/ 12 мая 2019

Здесь есть решение, переместив импорт в функцию вместо импорта вверху файла, но импорт сверху выглядит лучше.

Ссылка: https://stackoverflow.com/a/17226057/5581893

...