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 
  • Pythonic способ импорта модулей из пакетов
  • Является ли «из matplotlib import pyplot as plt» == «import matplotlib.pyplot as plt»?
  • Как проверить, был ли импортирован модуль python?
  • Почему «импорт» плохой?
  • Как импортировать пакет с помощью __import __ (), когда имя пакета известно только во время выполнения?
  • Почему Python запускает мой модуль, когда я его импортирую, и как его остановить?
  • Что такое импорт братьев и сестер на Python?
  • Невозможно импортировать коллекции из-за отсутствия <collection.py>
  •  
    Interesting Posts for Van-Lav

    Есть ли название для шаблона проектирования «вещи, которые нужно обработать»?

    Python / Twisted – как напечатать более подробное сообщение об ошибке

    Курсоры с postgres, где хранятся данные и сколько звонков в БД

    Удаление стоп-ордера с помощью NLTK и Pandas

    Собственный вектор не работает в Sympy

    Статические методы Python – как вызвать метод из другого метода

    не может быть выполнено, если условие с переменной django и переменной javascript

    Python: возврат к основному поведению __str__

    Получите dot-продукт данных с вектором и верните dataframe, в Pandas

    Как применить тему к приложению PyGTK

    Каков наилучший способ ссылки на имя класса в атрибуте class?

    Запросы на бутылки Python и unicode

    NotImplementedError: библиотека gflags должна быть установлена ​​для использования tools.run (). Установите gflags или лучше переключитесь на использование tools.run_flow ()

    Как проверить, находится ли ip в сети в python

    Поиск фигур в изображении с использованием opencv

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