Не импортируется файл python
В Python модуль-это автономный файл с инструкциями и определениями Python. Например, file.py , можно считать модулем с именем file . Это отличается от пакета тем, что пакет представляет собой коллекцию модулей в каталогах, которые придают модулям структуру и иерархию.
Модули помогают нам разбивать большие программы на небольшие файлы, которые более управляемы. С модулями возможность повторного использования кода становится реальностью. Предположим, у нас есть функция, которая часто используется в различных программах. Мы можем определить эту функцию в модуле, а затем импортировать ее в различные программы без необходимости каждый раз копировать ее код.
В этой статье мы увидим, как создавать модули Python и как использовать их в коде Python.
Написание Модулей
Модуль-это просто файл Python с расширением .py . Имя файла становится именем модуля. Внутри файла мы можем иметь определения и реализации классов, переменных или функций. Затем они могут быть использованы в других программах Python.
Теперь перейдите в тот же каталог, где вы сохранили вышеупомянутый файл, и создайте новый файл с именем main.py . Добавьте в файл следующий код:
Однако это всего лишь один из способов импорта модуля и вызова функции. Мы могли бы сделать это следующим образом:
В приведенном выше примере первая строка командует интерпретатору Python импортировать функцию с именем my_function из модуля с именем hello . В таком случае вам не нужно использовать точечную нотацию для доступа к функции, вы можете просто вызвать ее напрямую.
Однако в случае, когда наш модуль hello имеет несколько функций, оператор from hello import my_function не будет импортировать все функции hello в нашу программу, а только my_function . Если вы попытаетесь получить доступ к любой другой функции, будет сгенерирована ошибка. Вы должны импортировать весь модуль или импортировать каждую отдельную функцию, чтобы использовать их.
Мы можем определить переменную внутри модуля, которая затем может быть использована другими модулями. Чтобы продемонстрировать это, откройте файл hello.py и добавьте к нему следующий код:
Теперь откройте main.py файл и измените его следующим образом:
Мы успешно вызвали как функцию, так и переменную, определенную в модуле, так как импортировали весь модуль, а не только функцию my_function () .
Ранее мы говорили, что можем определить класс внутри модуля. Давайте посмотрим, как это сделать в следующем примере. Откройте hello.py файл и измените его следующим образом:
Здесь мы определили класс с именем Student . В этом классе были определены две переменные: name и course . В нем также был определен метод get_student_details () , который выводит данные студента на консоль.
Теперь откройте файл main.py и изменить его следующим образом:
В приведенном выше сценарии мы снова использовали точечную нотацию для создания объекта класса student из модуля hello . Затем мы использовали функцию get_student_details() для получения сведений о студенте.
Хотя модули в основном состоят из определений классов (в большинстве случаев), они также могут запускать свой собственный код при импорте. Чтобы продемонстрировать это, давайте изменим hello.py файл, где у нас есть определение функции my_function() , вместе с вызовом функции:
Теперь откройте файл main.py и удалить все строки, кроме следующих:
Приведенный выше вывод показывает, что мы определили и вызвали функцию внутри модуля. Когда модуль импортируется, он непосредственно возвращает результат из функции, не вызывая ее. Такое поведение не всегда желательно, но оно полезно для определенных случаев использования, таких как предварительная загрузка данных из кэша при импорте модуля.
Импорт всех объектов Модуля
Чтобы импортировать все объекты (функции, переменные, классы и т. Д.) Из модуля, мы можем использовать оператор import * . Например, для импорта всех объектов, содержащихся в модуле hello , мы можем использовать следующий оператор:
После добавления приведенного выше оператора в программу мы сможем использовать любую функцию, переменную или класс, содержащиеся в модуле hello , без префикса hello .
Доступ к модулю из другого пути
В Python модули используются более чем в одном проекте. Следовательно, нет смысла хранить ваши модули в каталоге одного из проектов, так как другие проекты не смогут использовать его так же легко.
У вас есть несколько вариантов, когда вам нужно получить доступ к модулю, который не хранится в том же каталоге, что и ваша программа. Давайте обсудим их в следующих нескольких разделах:
Добавление путей
Чтобы импортировать модуль из другого пути, вам сначала нужно импортировать модуль sys , а также любые другие модули Python, которые вы хотели бы использовать в своей программе.
Модуль sys предоставляется стандартной библиотекой Python и предоставляет функции и параметры, специфичные для конкретной системы. Функция path.append() из модуля sys может быть использована для добавления пути модуля в текущий проект.
Теперь откройте файл main.py , импортируйте модуль sys и укажите путь, по которому интерпретатор Python будет искать файлы. Это показано ниже:
В приведенном выше скрипте строка sys.path.append(‘F:/Python/’) указывает интерпретатору Python включить этот путь в список путей, которые будут искать при импорте модулей.
Добавление модуля в Python Path
Описанный выше метод работает только в том случае, если вы импортируете модуль sys . Если вы не импортируете модуль sys и не укажете путь к нему, то возникнет ошибка. Чтобы сделать модуль доступным для всей системы, вы можете добавить его в путь, где Python обычно проверяет наличие модулей и пакетов. Таким образом, вам не нужно будет импортировать модуль sys и указывать путь к модулю, как это было сделано в предыдущем разделе.
Прежде чем делать что-либо еще, вы должны сначала определить путь, по которому Python ищет модули и пакеты. Просто откройте командную строку вашей операционной системы и выполните команду python . Это приведет вас к терминалу Python.
Импортируйте модуль sys следующим образом:
Затем вы можете выполнить следующую команду, чтобы распечатать путь:
Выходные данные будут содержать по крайней мере один системный путь. Если вы делаете это из среды программирования, вы получите несколько путей. В моем случае я получил следующее:
Ваша цель должна состоять в том, чтобы найти тот, который вы используете в настоящее время. Вы должны искать что-то вроде следующего:
Переместите свой hello.py файл к пути. После этого вы сможете импортировать модуль hello из любого каталога обычным способом, как показано ниже:
Вывод
На этом статья заканчивается. Модуль-это просто файл Python с набором переменных и определений функций. Модуль облегчает повторное использование кода, поскольку вы можете определить функцию в модуле и вызвать ее из разных программ вместо того, чтобы определять функцию в каждой программе. Хотя модуль в основном используется для определения функций и классов, он также может экспортировать переменные и экземпляры классов.
1 ответ 1
нашёл решение проблемы, вроде (ну по крайней мере этот импорт больше не подсвечивается жёлтым в VSC и не просит починить) итак к сути: пишем pip install cryptohash и заменяем from Crypto.Hash import SHA512 на from cryptohash import sha512 (в моём случае) программу не тестировал, ещё не пофиксил другие проблемы, поэтому работоспособность программы с этим методом незнаю.
Если у вас аналогичная проблема, но не в точности похожая и вы уверенны, что установили модуль без ошибок (ошибки обычно подсвечиваются красным): Перейдите в папку где у вас находится python.exe -> Lib -> site-packages и поиском файлов Windows пишите название проблемного модуля, если их несколько или заглавная буква отличается, найдите нужный путём проверки файлов, в моём случае я проверил файл SHA512.py (который импортировал), он оказался в обоих, но работало только с тем, который был написан маленькими буквами
Python-сообщество
Структура папок абсолютно идентичная структуре из учебника, только директория с интерпретатором называется bin, а не flask:
В views.py импортирую класс из forms.py:
from forms import Seaker
При запуске “bin\\Scripts\\python run.py” получаю ошибку:
Аналогично с импортом из models.py
Честно говоря, уже сломал голову. Помогите, пожалуйста.
UPD. При этом при использовании app.model и app.forms всё работает. В чем фишка? Происходит же импорт модуля из текущей директории, для чего необходимо вызывать имя пакета?
Отредактировано aCL (Март 17, 2015 18:50:59)
не импортируется модуль из текущей директории
Покажи содержимое файлов run.py и __init__.py
не импортируется модуль из текущей директории
не импортируется модуль из текущей директории
Да, работает. Но почему именно через app, если импорт ведется из текущей директории?
не импортируется модуль из текущей директории
aCL
потому что импорты работают не так
из app импортируется, потому что импорт идет из пакета “app”, в данном случае из файла __init__.py, куда питон смотрит в первую очередь
не импортируется модуль из текущей директории
А куда он смотрит после этого?
сделал такую папку:
запуск run.py выводит вот это самое ‘qweqwe’
В чем разница между ситуацией из первого моего поста и этой? Почему один код работает, а второй нет, хотя, по сути, они идентичны?
не импортируется модуль из текущей директории
Никто не поможет или никто не знает ответа?
не импортируется модуль из текущей директории
> Но почему именно через app, если импорт ведется из текущей директории?
Ну наверно потому что у тебя текущая директория не app, а books
А вообще прочитай про sys.path и сразу многое станет ясным.
не импортируется модуль из текущей директории
> Но почему именно через app, если импорт ведется из текущей директории?
Ну наверно потому что у тебя текущая директория не app, а books
А вообще прочитай про sys.path и сразу многое станет ясным.
С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.
не импортируется модуль из текущей директории
Покажи содержимое файлов run.py и __init__.py
Всё ещё ищете ответ? Посмотрите другие вопросы с метками python modules или задайте свой вопрос.
Связанные
Похожие
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.5.10.42085
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как импортировать модули в Python 3.6.2? Начал изучать python, в книге раздел про импорт модулей, вот пример: я создал текстовый файл с текстом print(‘Hello module world!’) и сохранил с названием module1.py. Файл я закинул в папку с питоном. Как сказано в книге, просто введя import module1 питон импортирует содержимое файла, где бы на компе он не находился, либо его можно выполнить командой python module1 .
Короче, способ не работает на версии 3.6.2, вводил и module1 и module1.py , не находит файл, ни через вызов интерпретатора Python из командной строки, ни через IDLE. Ошибка module not found error , а при команде python module1 — syntax error .
PATH на компе настроен. Поискал, пишут что эта фишка работала на python до версии 3.5, а с версии 3.6 способ изменили, вот только как на 3.6 импортировать я так и не нашёл ничего понятного.
Что у вас в первой строчке файла module1.py записано? Судя по вопросу там строчка print('Hello module world!') , а судя по ошибке что-то не то.
не импортируется модуль из текущей директории
aCL
потому что импорты работают не так
из app импортируется, потому что импорт идет из пакета “app”, в данном случае из файла __init__.py, куда питон смотрит в первую очередь
не импортируется модуль из текущей директории
sander
aCLпотому что импорты работают не такиз app импортируется, потому что импорт идет из пакета “app”, в данном случае из файла __init__.py, куда питон смотрит в первую очередь
А куда он смотрит после этого?
сделал такую папку:
запуск run.py выводит вот это самое ‘qweqwe’
В чем разница между ситуацией из первого моего поста и этой? Почему один код работает, а второй нет, хотя, по сути, они идентичны?
1 ответ 1
Q: Как импортировать модули в Python 3.6.2?
Для ситуации в вопросе: также как и на предыдущих версиях Питона, вплоть до Питона 2. В Питон 3.6 вы получаете более специфичное исключение ModuleNotFoundError вместо более общей ImportError, когда модуль не найден, но это никак не влияет на тот факт, что модуль не найден.
Как сказано в книге, просто введя import module1 питон импортирует содержимое файла, где бы на компе он не находился,
Неверно. Вы не можете кинуть module1.py в любую папку и ожидать, что из откуда угодно из другой папки сможете проимпортировать модуль. Упрощая, module1.py ищется в одной из папок в sys.path (pythonpath), когда Питон встречает import module1 конструкцию.
Директория с текущим скриптом автоматически добавляется в sys.path . Если вы просто python запустили (без скрипта), то текущая рабочая директория добавляется. См. Текущая директория в Python.
либо его можно выполнить командой python module1
- Вы не должны пытаться python.exe из Питон REPL (уже запущенного Питона, там где вы видите >>> ) выполнять. Вместо этого python команда с командной строчки запускается (cmd.exe, bash, etc).
- Если module1.py в текущей папке лежит, то вы можете python module1.py команду выполнить (в командной строке — не в Питоне), чтобы как скрипт запустить этот модуль
- Можно как python -mmodule1 запустить, если папка с module1.py в sys.path .
Q: Как сделать,что бы импорт файла работал из нужной мне папки?Когда мой файл "module1.py" находится в директории с питоном,то всё работает,я создал в директории с питоном папку "myworks" и переместил файл туда,и теперь питон его не видит,хотя я добавил эту папку в Path
Это зависит от того что вы понимаете под "импорт файла" (запустить как скрипт или импортировать из другого скрипта). Если как импортировать, то посмотрите на sys.path список. Не нужно пытаться модули рядом с python.exe класть. Изменение %PATH% переменной никак на sys.path не влияет (это совершенно независимый набор директорий).
Автор оригинала: Rafal Jasionowski.
Добавление вашей пакеты на путь
Когда вы хотите добавить свой модуль на путь постоянно, вам необходимо найти путь к папке пакетов сайта и добавить папку, содержащую ваш модуль в эту или другую папку (где, конечно, Python ищет модули).
Вопрос в том, как можно найти путь?
Как импортировать модули в Pyton 3.6.2? Не работает import, ошибка module not found error
Как импортировать модули в Python 3.6.2? Начал изучать python, в книге раздел про импорт модулей, вот пример: я создал текстовый файл с текстом print(‘Hello module world!’) и сохранил с названием module1.py. Файл я закинул в папку с питоном. Как сказано в книге, просто введя import module1 питон импортирует содержимое файла, где бы на компе он не находился, либо его можно выполнить командой python module1 .
Короче, способ не работает на версии 3.6.2, вводил и module1 и module1.py , не находит файл, ни через вызов интерпретатора Python из командной строки, ни через IDLE. Ошибка module not found error , а при команде python module1 — syntax error .
PATH на компе настроен. Поискал, пишут что эта фишка работала на python до версии 3.5, а с версии 3.6 способ изменили, вот только как на 3.6 импортировать я так и не нашёл ничего понятного.
Q: Как импортировать модули в Python 3.6.2?
Для ситуации в вопросе: также как и на предыдущих версиях Питона, вплоть до Питона 2. В Питон 3.6 вы получаете более специфичное исключение ModuleNotFoundError вместо более общей ImportError, когда модуль не найден, но это никак не влияет на тот факт, что модуль не найден.
Как сказано в книге, просто введя import module1 питон импортирует содержимое файла, где бы на компе он не находился,
Неверно. Вы не можете кинуть module1.py в любую папку и ожидать, что из откуда угодно из другой папки сможете проимпортировать модуль. Упрощая, module1.py ищется в одной из папок в sys.path (pythonpath), когда Питон встречает import module1 конструкцию.
Директория с текущим скриптом автоматически добавляется в sys.path . Если вы просто python запустили (без скрипта), то текущая рабочая директория добавляется. См. Текущая директория в Python.
либо его можно выполнить командой python module1
- Вы не должны пытаться python.exe из Питон REPL (уже запущенного Питона, там где вы видите >>> ) выполнять. Вместо этого python команда с командной строчки запускается (cmd.exe, bash, etc).
- Если module1.py в текущей папке лежит, то вы можете python module1.py команду выполнить (в командной строке — не в Питоне), чтобы как скрипт запустить этот модуль
- Можно как python -mmodule1 запустить, если папка с module1.py в sys.path .
Q: Как сделать,что бы импорт файла работал из нужной мне папки?Когда мой файл "module1.py" находится в директории с питоном,то всё работает,я создал в директории с питоном папку "myworks" и переместил файл туда,и теперь питон его не видит,хотя я добавил эту папку в Path
Структура папок абсолютно идентичная структуре из учебника, только директория с интерпретатором называется bin, а не flask:
В views.py импортирую класс из forms.py:
from forms import Seaker
При запуске “bin\\Scripts\\python run.py” получаю ошибку:
Аналогично с импортом из models.py
Честно говоря, уже сломал голову. Помогите, пожалуйста.
UPD. При этом при использовании app.model и app.forms всё работает. В чем фишка? Происходит же импорт модуля из текущей директории, для чего необходимо вызывать имя пакета?
Отредактировано aCL (Март 17, 2015 18:50:59)
Практическая работа. Создание собственного модуля
Программист на Python всегда может создать собственный модуль, чтобы использовать его в нескольких своих программах или даже предоставить в пользование всему миру. В качестве тренировки создадим модуль с функциями для вычисления площадей прямоугольника, треугольника и круга:
Здесь также иллюстрируется принцип, что один модуль может импортировать другие. В данном случае импортируются функции из модуля math .
Поместите данный код в отдельный файл square.py . Однако куда поместить сам файл?
Когда интерпретатор Питона встречает команду импорта, то просматривает на наличие файла-модуля определенные каталоги. Их перечень можно увидеть по содержимому sys.path :
Это список адресов в Linux. В Windows он будет несколько другим. Первый элемент – пустая строка, что обозначает текущий каталог, то есть то место, где сохранена сама программа, импортирующая модуль. Если вы сохраните файл-модуль и файл-программу в одном каталоге, то интерпретатор без труда найдет модуль.
Также модуль можно положить в любой другой из указанных в списке каталогов. Тогда он будет доступен для всех программ на Python, а также его можно будет импортировать в интерактивном режиме.
Поместите файл square.py в тот же каталог, где будет исполняемая программа. Ее код должен включать инструкцию импорта модуля square (при импорте расширение файла не указывается) и вызов той функции и с теми параметрами, которые ввел пользователь. То есть у пользователя надо спросить, площадь какой фигуры он хочет вычислить. Далее запросить у него аргументы для соответствующей функции. Передать их в функцию из модуля square , а полученный оттуда результат вывести на экран.
Примечание. Исполнение модуля как самостоятельного скрипта, а также создание строк документации, которые отображает встроенная в Python функция help() , будут рассмотрены в курсе объектно-ориентированного программирования.
Примеры решения и дополнительные уроки в android-приложении и pdf-версии курса
не импортируется модуль из текущей директории
не импортируется модуль из текущей директории
Да, работает. Но почему именно через app, если импорт ведется из текущей директории?
Вызов функции из другого файла в Python
Set_up: у меня есть файл .py для каждой функции, которую мне нужно использовать в программе.
В этой программе мне нужно вызывать функцию из внешних файлов.
Но я получаю ошибку:
ImportError: Нет модуля с именем file.py; файл не является пакетом
Как мне решить эту проблему?
Нет необходимости добавлять file.py при импорте. Просто напишите from file import function , а затем вызовите функцию, используя function(a, b) . Причина, по которой это может не сработать, заключается в том, что file является одним из основных модулей Python, поэтому я предлагаю вам изменить имя вашего файла.
Обратите внимание, что если вы пытаетесь импортировать функции из a.py в файл с именем b.py , вам необходимо убедиться, что a.py и b.py находятся в одном каталоге.
Предположим, файл, который вы хотите вызвать, — anotherfile.py, а метод, который вы хотите вызвать, — method1, затем сначала импортируйте файл, а затем метод
Если method1 является частью класса, пусть класс будет class1, тогда
Затем создайте объект класса 1, предположим, что имя объекта — ob1, затем
Прежде всего, вам не нужен .py .
Если у вас есть файл a.py , а внутри у вас есть несколько функций:
И вы хотите импортировать их в z.py вы должны написать
Если ваш файл находится в другой структуре пакета, и вы хотите вызвать его из другого пакета, то вы можете вызвать его следующим образом:
Допустим, у вас есть следующая структура пакета в вашем проекте Python:
В — com.my.func.DifferentFunction файле Python у вас есть какая-то функция, например:
И вы хотите вызывать различные функции из Example3.py , а затем сделать это следующим образом:
Определить оператор импорта в Example3.py — файле для импорта всех функций
Или определите имя каждой функции, которую вы хотите импортировать
Затем в Example3.py вы можете вызвать функцию для выполнения:
Вы также можете вызвать функцию из другого каталога, если вы не можете или не хотите, чтобы функция находилась в том же каталоге, где вы работаете. Вы можете сделать это двумя способами (возможно, есть больше альтернатив, но это те, которые работали для меня).
Альтернатива 1 Временно измените ваш рабочий каталог
Альтернатива 2 Добавьте каталог, в котором у вас есть функция, в sys.path.
Функции из файла .py (могут (конечно) находиться в другом каталоге) можно просто импортировать, сначала написав каталоги, а затем имя файла без расширения .py:
И позже будет использоваться: function_name()
Переименуйте модуль в нечто иное, чем «файл».
Также убедитесь, что при вызове функции:
1) если вы импортируете весь модуль, вы повторяете имя модуля при его вызове:
2) или если вы импортируете определенные функции, функции с псевдонимом или все функции, использующие *, вы не повторяете имя модуля:
Вы можете сделать это двумя способами. Во-первых, просто импортируйте нужную функцию из файла file.py. Для этого используйте
Другой способ — импортировать весь файл.
Затем вы можете вызвать любую функцию внутри file.py, используя
Вам не нужно добавлять file.py .
Просто храните файл в одном месте с файлом, из которого вы хотите его импортировать. Затем просто импортируйте ваши функции:
Наткнулся на ту же функцию, но мне пришлось сделать ниже, чтобы она заработала.
Если вы видите «ModuleNotFoundError: модуль не назван», вам, вероятно, нужна точка (.) Перед именем файла, как показано ниже;
Сначала сохраните файл в формате .py (например, my_example.py ). И если этот файл имеет функции,
В вызывающей функции вам просто нужно ввести следующие строки.
Добавьте точку (.) перед именем файла, если вы хотите импортировать этот файл, который находится в том же каталоге, где вы выполняете свой код.
Более современное решение: pip install pypiwin32 Это содержит файлы.whl, которые помогут установить в Windows. ответил(а) 4 месяца назад David Metcalfe
Другие модули устанавливаются и импортируются корректно, например - import ip2geotools и import tempfile
мое первое желание это ставить все это дело в виртуальное окружение. Второе - это перепроверить совместимость версий. А, третье - поставить в виртуальное окружение с python версией ниже чем 3.9.5 (но это ради эксперимента и более детального погружения в вопрос)
Я ставил модуль Crypto из пакета pycryptodome . Вы его не пробовали? Ну и проконтролировать что реально установлено в директории site-packages . Может там вообще нет модуля Crypto . Или, например, у меня раз модуль поставился в директорию названную маленькими буквами, а ссылаться на него требовалось по названию с большой буквы. Пришлось руками просто переименовать директорию и он заработал.
Вы пакеты устанавливали в глобальный питон, а IDE, возможно, использует virtualenv. Выполните команду pip freeze из консоли IDE, чтобы увидеть установленные пакеты в том окружении, которое использует IDE. Если там нет нужных, то установите их именно оттуда командами pip install
Когда у вас есть несколько файлов, которые импортируют друг друга
Иногда в Python, даже если у вас есть __init__.py Файл в вашей папке, исходит ImporteRor, он говорит, что имя не может быть импортировано. Чтобы устранить эту проблему, порядок импорта должен быть изменен. Код, вызывающий ошибку:
Тогда мы можем получить то, что мы хотим:
Модули
Встроенные в язык программирования функции доступны сразу. Чтобы их вызвать, не надо выполнять никаких дополнительных действий. Однако за время существования любого популярного языка на нем было написано столько функций и классов, которые оказались востребованными множеством программистов и в разных областях, что включить весь этот объем кода в сам язык если возможно, то нецелесообразно.
Чтобы разрешить проблему доступа к дополнительным возможностям языка, в программировании стало общепринятой практикой использовать так называемые модули, пакеты и библиотеки. Каждый модуль содержит коллекцию функций и классов, предназначенных для решения задач из определенной области. Так в модуле math языка Python содержатся математические функции, модуль random позволяет генерировать псевдослучайные числа, в модуле datetime содержатся классы для работы с датами и временем, модуль sys предоставляет доступ к системным переменным и т. д.
Количество модулей для языка Python огромно, что связано с популярностью языка. Часть модулей собрана в так называемую стандартную библиотеку. Стандартная она потому, что поставляется вместе с установочным пакетом. Однако существуют сторонние библиотеки. Они скачиваются и устанавливаются отдельно.
Для доступа к функционалу модуля, его надо импортировать в программу. После импорта интерпретатор "знает" о существовании дополнительных классов и функций и позволяет ими пользоваться.
В Питоне импорт осуществляется командой import . При этом существует несколько способов импорта. Рассмотрим работу с модулем на примере math . Итак,
Ничего не произошло. Однако в глобальной области видимости появилось имя math . Если до импорта вы упомянули бы имя math , то возникла бы ошибка NameError . Теперь же
В программе завелся объект math , относящийся к классу module .
Чтобы увидеть перечень функций, входящих в этот модуль, воспользуемся встроенной в Python функцией dir() , передав ей в качестве аргумента имя модуля:
Проигнорируем имена с двойными подчеркиваниями. Все остальное – имена функций и констант (переменных, которые не меняют своих значений), включенных в модуль math. Чтобы вызвать функцию из модуля, надо впереди написать имя модуля, поставить точку, далее указать имя функции, после чего в скобках передать аргументы, если они требуются. Например, чтобы вызвать функцию pow из math, надо написать так:
Обратите внимание, эта другая функция pow() , не та, что встроена в сам язык. "Обычная" функция pow() возвращает целое, если аргументы целые числа:
Для обращения к константе скобки не нужны:
Если мы не знаем, что делает та или иная функция, то можем получить справочную информацию о ней с помощью встроенной в язык Python функции help() :
Второй способ импорта – это когда импортируется не сам модуль, а только необходимые функции из него.
Перевести можно как "из модуля math импортировать функции gcd , sqrt и hypot ".
В таком случае при их вызове не надо перед именем функции указывать имя модуля:
Чтобы импортировать сразу все функции из модуля:
Импорт через from не лишен недостатка. В программе уже может быть идентификатор с таким же именем, как имя одной из импортируемых функций или констант. Ошибки не будет, но одно из них окажется "затерто":
Здесь исчезает значение 3.14, присвоенное переменной pi . Это имя теперь указывает на число из модуля math . Если импорт сделать раньше, чем присвоение значения pi , то будет все наоборот:
В этой связи более опасен именно импорт всех функций. Так как в этом случае очень легко не заметить подмены значений идентификаторов.
Однако можно изменить имя идентификатора из модуля на какое угодно:
В данном случае константа pi из модуля импортируется под именем P . Смысл подобных импортов в сокращении имен, так как есть модули с длинными именами, а имена функций и классов в них еще длиннее. Если в программу импортируется всего пара сущностей, и они используются в ней часто, то имеет смысл переименовать их на более короткий вариант. Сравните:
Во всех остальных случаях лучше оставлять идентификаторы содержимого модуля в пространстве имен самого модуля и получать доступ к ним через имя модуля, то есть выполнять импорт командой import имя_модуля , а вызывать, например, функции через имя_модуля.имя_функции() .
не импортируется модуль из текущей директории
Лутц передает привет
В обеих версиях, Python 3.0 и 2.6, инструкции from теперь могут использовать
точки («.»), чтобы указать, что поиск модулей в первую очередь должен про-изводиться в том же самом пакете (эта особенность известна как импортирование относительно пакета), а не где-то в другом месте, в пути поиска (эта особенность называется импортирование по абсолютному пути). То есть:
• В обеих версиях Python, 3.0 и 2.6, в инструкции fromв начале пути мож-но использовать точки, чтобы указать, что импорт должен производиться
относительновмещающего пакета, – при таком способе импортирования
поиск модулей будет производиться только внутри пакета, а модули с теми
же именами, находящиеся где-то в пути поиска (sys.path), будут недоступны. Благодаря этому модули внутри пакета получают преимущество перед
модулями за его пределами.
• В Python 2.6 обычная операция импортирования в программном коде пакета (без точек) в настоящее время по умолчанию выполняется в порядке
«сначала поиск относительно пакета, потом – абсолютный поиск». То есть
поиск сначала производится в каталоге пакета и только потом в пути поиска. Однако в Python 3.0 по умолчанию выполняется импортирование по абсолютному пути – при отсутствии точек операции импортирования пропускают вмещающий пакет и пытаются отыскать импортируемые модули
в пути поиска sys.path.
Например, в обеих версиях Python, 3.0 и 2.6, инструкция вида:
предписывает интерпретатору импортировать модуль с именем spam, расположенный в том же пакете, что и файл, где находится эта инструкция. Аналогично, следующая инструкция:
означает: «из модуля с именем spam, расположенного в том же пакете, что
и файл, где находится эта инструкция, импортировать переменную name».
Поведение инструкции безначальной точки зависит от используемой версии
Python. В версии 2.6 такая инструкция импортирования по умолчанию также
будет использовать порядок поиска «сначала относительно пакета, а затем – абсолютный поиск» (то есть сначала поиск выполняется в каталоге пакета), если
только в импортирующий файл не будет включена следующая инструкция:
Если эта инструкция присутствует, она включает использование абсолютного
пути поиска, которое по умолчанию используется в Python 3.0.
В Python 3.0 все операции импортирования без дополнительных точек никогда
не пытаются отыскать модуль внутри пакета и производят поиск по абсолютно-му пути, хранящемуся в списке sys.path. Например, когда задействован меха-низм импортирования в версии 3.0, следующая инструкция всегда будет нахо-дить не модуль stringв текущем пакете, а одноименный модуль в стандартной библиотеке:
Без инструкции from __future__ в Python 2.6 всегда будет импортироваться модуль string из пакета. Чтобы получить то же поведение в версии 3.0 и 2.6, ког-да по умолчанию выполняется импорт по абсолютному пути, для выполнения
операции импортирования относительно пакета можно использовать следую-щую форму инструкции:
На сегодняшний день этот прием работает в обеих версиях Python, 2.6 и 3.0.
Единственное отличие модели импортирования в версии 3.0 состоит в том, что
она является обязательной, когда требуется по простому имени загрузить модуль, находящийся в том же каталоге пакета, что и файл, откуда производится
импортирование.
Обратите внимание: ведущий символ точки может использоваться только в ин-струкции from – в инструкции importон недопустим. В Python 3.0 инструкция
import modnameвсегда выполняет импортирование по абсолютному пути, пропу-ская поиск в каталоге пакета. В Python 2.6 она по-прежнему выполняет импорт
по относительному пути (то есть сначала она просматривает каталог пакета),
но в Python 2.7 она будет выполнять импорт по абсолютному пути. Инструкции fromбез ведущей точки ведут себя точно так же, как инструкции import, – в версии 3.0 они выполняют импортирование по абсолютному пути (пропуская
каталог пакета), а в версии 2.6 они выполняют поиск «сначала относительно
пакета, а затем – абсолютный поиск» (поиск в каталоге пакета выполняется
в первую очередь).
Возможны также и другие варианты точечной нотации для ссылки на модули
в пакете. Допустим, что имеется каталог mypkg пакета, тогда следующие аль-
Импортирование относительно пакета
тернативные варианты импортирования внутри этого пакета будут работать
так, как описывается:
Резюме
В начале мы объяснили, как решить проблему из названия, а затем мы объяснили, почему возникает ошибка импорта. Тогда были представлены три способа действия. Сначала описал, как сделать локальный пакет (добавление __init__.py ), вторым, как сделать пакет, который можно вызвать из любого сценария Python (добавьте модуль в папку «Пакеты сайта) и третьим, что делать, когда У вас есть несколько файлов, которые импортируют друг друга ( ImporterRor: не может импортировать имя (. ) ).
Я надеюсь, что эта статья помогла вам понять, почему эта ошибка произошла в вашем файле и дала вам ключ для его удаления.
Создание локального пакета
Чтобы добавить этот файл просто создать текстовый документ с именем __init__ В вашей папке и измените его расширение на .py => __init__.py Отказ
Примечание : Помните, что __init__.py Файл не может иметь никаких других символов в его имени .
Почему Python PormentError произойдет?
Вы можете увидеть интерактивный пример в нашем онлайн-проекте браузера:
Так что мы можем сделать с этой ошибкой?
не импортируется модуль из текущей директории
Никто не поможет или никто не знает ответа?
Читайте также: