ImportError: невозможно импортировать имя X

У меня есть четыре разных файла с именем: main, vector, entity и физика. Я не буду публиковать весь код, в основном только импорт, потому что я думаю, что это ошибка. Но если вы хотите, я могу опубликовать больше.

Главный:

import time from entity import Ent from vector import Vect #the rest just creates an entity and prints the result of movement 

Сущность:

 from vector import Vect from physics import Physics class Ent: #holds vector information and id def tick(self, dt): #this is where physics changes the velocity and position vectors 

Вектор:

 from math import * class Vect: #holds i, j, k, and does vector math 

Физика:

 from entity import Ent class Physics: #physics class gets an entity and does physics calculations on it. 

Затем я запускаю с main.py, и я получаю следующую ошибку:

 Traceback (most recent call last): File "main.py", line 2, in <module> from entity import Ent File ".../entity.py", line 5, in <module> from physics import Physics File ".../physics.py", line 2, in <module> from entity import Ent ImportError: cannot import name Ent 

Я очень новичок в python, но работал с C ++ в течение длительного времени. Я предполагаю, что причиной является импорт объекта дважды, один раз в основной, а затем в физику, но я не знаю обходного пути. Кто-нибудь поможет?

6 Solutions collect form web for “ImportError: невозможно импортировать имя X”

У вас есть циклический зависимый импорт. physics.py импортируется из entity до определения класса Ent и physics пытается импортировать entity который уже инициализируется. Удалите зависимость от physics от модуля entity .

Хотя вам обязательно нужно избегать циклических зависимостей, вы можете отложить импорт в python.

например:

 import SomeModule def someFunction(arg): from some.dependency import DependentClass 

это (по крайней мере в некоторых случаях) обойдет ошибку.

Это круговая зависимость. Его можно решить без каких-либо структурных изменений кода. Проблема возникает из-за того, что в vector вы требуете, чтобы entity был сразу доступен для использования, и наоборот. Причина этой проблемы заключается в том, что вы запрашиваете доступ к содержимому модуля до его готовности – используя from x import y . Это по существу то же самое, что и

 import x y = xy del x 

Python способен обнаруживать циклические зависимости и предотвращать бесконечный цикл импорта. По сути, все, что происходит, это то, что для модуля создается пустой заполнитель (т. Е. Он не имеет содержимого). После компиляции циклически зависимых модулей он обновляет импортированный модуль. Это работает примерно так.

 a = module() # import a # rest of module a.update_contents(real_a) 

Чтобы python мог работать с циклическими зависимостями, вы должны использовать только стиль import x .

 import x class cls: def __init__(self): self.y = xy 

Поскольку вы больше не ссылаетесь на содержимое модуля на верхнем уровне, python может скомпилировать модуль, фактически не имея доступа к содержимому циклической зависимости. Под верхним уровнем я подразумеваю строки, которые будут выполняться во время компиляции, а не в содержании функций (например, y = xy ). Статические переменные или переменные класса, обращающиеся к содержимому модуля, также могут вызывать проблемы.

Я тоже получил эту ошибку по другой причине …

 from my_sub_module import my_function 

В главном скрипте были завершены строки Windows. my_sub_module имел окончание строки UNIX. Изменение их, чтобы они были одинаковыми, устранили проблему. Они также должны иметь одинаковую кодировку символов.

Python чувствителен к регистру, поэтому entity ! = Entity . Я предлагаю вам изменить корпус entity в вашем импорте как Entity . Это устранит вашу проблему.

Главная ваша должна быть такой:

 import time from entity import * from vector import * #the rest just creates an entity and prints the result of movement 
  • Почему существуют резервные способы импорта в Python?
  • загрузить код python во время выполнения
  • Импорт из Python из одной папки, но не другой
  • Реверсирование из импорта модуля *
  • Абсолютный и явный относительный импорт модуля Python
  • Python, Windows и многопроцессорность
  • Почему для импорта функции из модуля требуется больше времени, чем весь модуль?
  • Импортирование пакета с точным именем локально для модульного тестирования
  • Ошибка импорта модуля C ++ Python: «undefined symbol: Py_InitModule3» (Py_InitModule ())
  • Ошибка импорта Python: нет модуля с именем 'card'
  • Импорт модулей из родительской папки
  •  
    Interesting Posts for Van-Lav

    login () в структуре тестирования Django

    Захватите диалог «Сохранить изменения» при использовании win32gui и закрытии встроенного приложения в QApplication?

    В какой ситуации я могу использовать Dask вместо Apache Spark?

    Терминал Pycharm не изменяет версию Python, соответствующую версии Python, в Project Interpreter

    Python – использование потоков или очереди для итерации по циклу for, который вызывает функцию

    Вернуться MongoEngine Документы как JSON

    Resident Backend Google App Engine "/ _ah / background" (Python)

    любые инструменты Python для чтения данных в стиле Скантрона

    Объединить много строк json с входами pandon pandas

    Как импортировать модуль в Python с помощью importlib.import_module

    Как реализовать эффективную логику фильтрации в Python?

    Python: вернуть кортеж или список?

    Matplotlib LaTeX: непоследовательное поведение с греческими буквами (конкретно \ rho)

    Процесс Python продолжает расти в сценарии загрузки django db

    Выполнение неблокирующих запросов? – Django

    Python - лучший язык программирования в мире.