Автор оригинала: Rafal Jasionowski.
Python’s ImportError ( ModulenotfoundError
) Указывает, что вы пытались импортировать модуль, который Python не находит. Обычно это можно устранить, добавив файл с именем __init__.py
в каталог, а затем добавление этого каталога на $ Pythonpath.
. Если этот файл ( __init__.py
) находится в папке, измените положение импорта в файл, который импортируется сверху вниз.
Почему Python PormentError произойдет?
ImportError
Обнаружен, когда Python имеет проблемы с успешным импортным модулем. Обычно эта проблема вызвана неправильными дорожка и обычно отображается с сообщением о том, что есть «Нет модуля по имени (…)» или «Невозможно импортировать имя (…)» Отказ
Вы можете увидеть интерактивный пример в нашем онлайн-проекте браузера:
Упражнение : Попробуйте исправить сообщение об ошибке, следуя подсказке в комментарии!
Так что мы можем сделать с этой ошибкой?
Создание локального пакета
Если IsOvereRor поднят ( ImportError: нет модуля с именем (…) ), когда вы импортируете свой собственный скрипт, вам необходимо проверить, есть ли сценарий, который вы хотите импортировать, имеет файл с именем __init__.py
В своем каталоге, если это не так, то вам нужно создать его, потому что файлы с именем __init__.py
Используются для маркировки каталогов на диске в качестве каталогов пакетов Python, а каталоги без такого файла игнорируются.
Чтобы добавить этот файл просто создать текстовый документ с именем __init__
В вашей папке и измените его расширение на .py
=> __init__.py
Отказ
Примечание : Помните, что __init__.py
Файл не может иметь никаких других символов в его имени !!!
Добавление вашей пакеты на путь
Когда вы хотите добавить свой модуль на путь постоянно, вам необходимо найти путь к папке пакетов сайта и добавить папку, содержащую ваш модуль в эту или другую папку (где, конечно, Python ищет модули).
Вопрос в том, как можно найти путь?
Самый простой способ найти путь – это написать следующий скрипт:
import sys print(sys.path) # Output: ['PathToYourFolders', 'C:\\Users\\YourUsername\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip', 'C:\\Users\\YourUsername\\AppData\\Local\\Programs\\Python\\Python38\\DLLs', 'C:\\Users\\YourUsername\\AppData\\Local\\Programs\\Python\\Python38\\lib', 'C:\\Users\\YourUsername\\AppData\\Local\\Programs\\Python\\Python38', 'C:\\Users\\YourUsername\\AppData\\Roaming\\Python\\Python38\\site-packages', 'C:\\Users\\YourUsername\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages']
Тогда мы видим все пути, в которых питон ищет модули, просто добавьте свой модуль к одному из них (лучшие … \ lib \ сайт-пакеты). Как только мы сделаем это, мы сможем вызвать модуль из любого сценария Python.
Когда у вас есть несколько файлов, которые импортируют друг друга
Иногда в Python, даже если у вас есть __init__.py
Файл в вашей папке, исходит ImporteRor, он говорит, что имя не может быть импортировано. Чтобы устранить эту проблему, порядок импорта должен быть изменен. Код, вызывающий ошибку:
#a2.py file from test.b import b2 def a1(): print('a1') b2() from test.a import a1 #b2.py file def b1(): print('b1') a1() def b2(): print('b2') if __name__ == '__main__': b1()
Вывод будет следующим – ImportError: не может импортировать имя «A1»
Отказ Но Если мы изменим позицию от Test.B Импорт B2
в подобном ниже:
def a1(): print('a1') b2() from test.b import b2
Тогда мы можем получить то, что мы хотим:
b1 a1 b2
Резюме
В начале мы объяснили, как решить проблему из названия, а затем мы объяснили, почему возникает ошибка импорта. Тогда были представлены три способа действия. Сначала описал, как сделать локальный пакет (добавление __init__.py
), вторым, как сделать пакет, который можно вызвать из любого сценария Python (добавьте модуль в папку «Пакеты сайта) и третьим, что делать, когда У вас есть несколько файлов, которые импортируют друг друга ( ImporterRor: не может импортировать имя (...)
).
Я надеюсь, что эта статья помогла вам понять, почему эта ошибка произошла в вашем файле и дала вам ключ для его удаления.