Как использовать переменную из другого файла python
Перейти к содержимому

Как использовать переменную из другого файла python

  • автор:

Как обратиться к переменной из другого модуля в PYTHON 3

Мне надо завести в main переменную, которую я смогу изменять в sub. Проблема в том, что sub импортируется в main и при добавлении строчки from main import charts (где charts — нужная мне константа) получается ошибка, как я понимаю, связанная с зацикленным импортом.

Я видел похожий вопрос тут Импорт функций из другого файла pytnon, но там всего лишь один ответ, который мне кажется неправильным. Хотелось бы узнать, существуют ли какие-то еще варианты выхода из данной ситуации

main.py

sub.py

Ответы (2 шт):

main.py

sub.py

1) Можно создать глобальную переменную

2) Можно создать используя @property и .setter, и сразу при обновлении переменной выполнять метод

Импорт модулей в Python

Оператор импорта в Python используется для импорта модулей, которые мы хотим использовать в нашей программе. Модули – это скрипты в Python, содержащие служебные функции, типы, классы и т.д. Есть много модулей, которые мы регулярно используем в программах, такие как sys, os, collections и т.д.

Если мы хотим импортировать встроенные модули в Python или любой сторонний модуль, установленный с помощью диспетчера пакетов, такого как PIP, мы можем очень легко импортировать и использовать их в нашей программе.

Python ищет модули и пакеты в свойстве sys.path. Этот путь всегда содержит текущий каталог, из которого выполняется сценарий, поэтому любой модуль в текущем каталоге можно импортировать как есть.

Импорт в Python чувствителен к регистру, поэтому import sys и import Sys ищут разные модули для импорта.

Python сначала ищет модуль во встроенных модулях. Если не найден, то ищет модули в текущем каталоге. Итак, если у нас есть файл math.py в том же каталоге, что и наш основной скрипт, он будет загружен при вызове import math, если модуль ‘math’ отсутствует во встроенных модулях. Вы можете получить список встроенных модулей, используя sys.builtin_module_names. На изображении ниже показаны встроенные модули:

Список встроенных модулей в Python

Классы и функции импорта из модуля

Мы также можем импортировать определенные классы из модуля. Таким образом, мы можем импортировать определенные части модуля и использовать их. Это также помогает в написании свободного кода. Мы можем добиться этого, используя ключевое слово from с оператором импорта.

Пользовательский модуль импорта

Когда мы создаем скрипт, мы можем импортировать его в другой скрипт Python, используя его имя. Допустим, у нас есть следующая структура каталогов с несколькими скриптами.

Импорт в python

У нас есть следующие функции, определенные в файле utils.py.

Мы можем импортировать его в python_import_examples.py и использовать его функции.

Импорт as

Мы можем определить собственное имя для импортированного модуля, используя оператор import as.

Результат будет таким же, как и в предыдущей программе.

Импорт из другого каталога

Если скрипт, который мы импортируем, находится в том же каталоге, то мы можем импортировать его так же, как и встроенные модули. Однако, если скрипт присутствует в другом каталоге, мы можем использовать библиотеку importlib, чтобы импортировать их как модуль.

Скажем, наш Strutils.py имеет следующие функции:

Теперь давайте посмотрим, как использовать importlib для импорта этого скрипта в наш пример.

Класс импорта из другого файла

Мы можем импортировать скрипты и использовать определенные в них классы с помощью importlib. Допустим, у нас есть классы Person и Student, определенные в файле myclasses.py.

Вот пример кода, в котором я использую ранее определенную функцию для импорта этого скрипта и использования его классов.

Обратите внимание, что мы можем сохранить любое имя для импортируемого модуля, это похоже на использование оператора import as.

Есть еще один способ импортировать скрипты из другого каталога с помощью модуля sys.

Это полезно, когда мы хотим импортировать только определенные классы и функции из импортированного файла. Кроме того, использование этого кода намного проще для понимания.

Заключение

Оператор импорта Python позволяет нам импортировать модули, определенные классы и функции из модулей. Его очень легко использовать, и, поскольку в большинстве случаев мы работаем со встроенными модулями или модулями, установленными с использованием PIP, нам не нужно писать логику для загрузки скриптов из другого каталога.

Как работают импорты в Python

Обложка: Как работают импорты в Python

Порой бывает трудно правильно реализовать import с первого раза, особенно если мы хотим добиться правильной работы на плохо совместимых между собой версиях Python 2 и Python 3. Попытаемся разобраться, что из себя представляют импорты в Python и как написать решение, которое подойдёт под обе версии языка.

Содержание

Ключевые моменты

  • Выражения import производят поиск по списку путей в sys.path .
  • sys.path всегда включает в себя путь скрипта, запущенного из командной строки, и не зависит от текущей рабочей директории.
  • Импортирование пакета по сути равноценно импортированию __init__.py этого пакета.

Основные определения

  • Модуль: любой файл *.py . Имя модуля — имя этого файла.
  • Встроенный модуль: «модуль», который был написан на Си, скомпилирован и встроен в интерпретатор Python, и потому не имеет файла *.py .
  • Пакет: любая папка, которая содержит файл __init__.py . Имя пакета — имя папки.
    • С версии Python 3.3 любая папка (даже без __init__.py ) считается пакетом.

    Пример структуры директорий

    Обратите внимание, что в корневой папке test/ нет файла __init__.py .

    Что делает import

    При импорте модуля Python выполняет весь код в нём. При импорте пакета Python выполняет код в файле пакета __init__.py , если такой имеется. Все объекты, определённые в модуле или __init__.py , становятся доступны импортирующему.

    Встроенные функции Python: какие нужно знать и на какие не стоит тратить время

    Основы import и sys.path

    Вот как оператор import производит поиск нужного модуля или пакета согласно документации Python:

    • директории, содержащей исходный скрипт (или текущей директории, если файл не указан);
    • директории по умолчанию, которая зависит от дистрибутива Python;
    • PYTHONPATH (список имён директорий; имеет синтаксис, аналогичный переменной окружения PATH ).

    Технически документация не совсем полна. Интерпретатор будет искать не только файл (модуль) spam.py , но и папку (пакет) spam .

    Обратите внимание, что Python сначала производит поиск среди встроенных модулей — тех, которые встроены непосредственно в интерпретатор. Список встроенных модулей зависит от дистрибутива Python, а найти этот список можно в sys.builtin_module_names (Python 2 и Python 3). Обычно в дистрибутивах есть модули sys (всегда включён в дистрибутив), math , itertools , time и прочие.

    В отличие от встроенных модулей, которые при поиске проверяются первыми, остальные (не встроенные) модули стандартной библиотеки проверяются после директории запущенного скрипта. Это приводит к сбивающему с толку поведению: возможно «заменить» некоторые, но не все модули стандартной библиотеки. Допустим, модуль math является встроенным модулем, а random — нет. Таким образом, import math в start.py импортирует модуль из стандартной библиотеки, а не наш файл math.py из той же директории. В то же время, import random в start.py импортирует наш файл random.py .

    Кроме того, импорты в Python регистрозависимы: import Spam и import spam — разные вещи.

    Функцию pkgutil.iter_modules() (Python 2 и Python 3) можно использовать, чтобы получить список всех модулей, которые можно импортировать из заданного пути:

    Чуть подробнее о sys.path

    Чтобы увидеть содержимое sys.path , запустите этот код:

    Документация Python описывает sys.path так:

    Список строк, указывающих пути для поиска модулей. Инициализируется из переменной окружения PYTHONPATH и директории по умолчанию, которая зависит от дистрибутива Python.

    При запуске программы после инициализации первым элементом этого списка, path[0] , будет директория, содержащая скрипт, который был использован для вызова интерпретатора Python. Если директория скрипта недоступна (например, если интерпретатор был вызван в интерактивном режиме или скрипт считывается из стандартного ввода), то path[0] является пустой строкой. Из-за этого Python сначала ищет модули в текущей директории. Обратите внимание, что директория скрипта вставляется перед путями, взятыми из PYTHONPATH .

    Источник: Python 2 и Python 3

    Документация к интерфейсу командной строки Python добавляет информацию о запуске скриптов из командной строки. В частности, при запуске python <script>.py .

    Если имя скрипта ссылается непосредственно на Python-файл, то директория, содержащая этот файл, добавляется в начало sys.path , а файл выполняется как модуль main .

    Источник: Python 2 и Python 3

    Итак, повторим порядок, согласно которому Python ищет импортируемые модули:

    1. Модули стандартной библиотеки (например, math , os ).
    2. Модули или пакеты, указанные в sys.path :
        1. Если интерпретатор Python запущен в интерактивном режиме:
          • sys.path[0] — пустая строка » . Это значит, что Python будет искать в текущей рабочей директории, из которой вы запустили интерпретатор. В Unix-системах эту директорию можно узнать с помощью команды pwd .

        Если мы запускаем скрипт командой python <script>.py :

        • sys.path[0] — это путь к <script>.py .

        Обратите внимание, что при запуске скрипта для sys.path важна не директория, в которой вы находитесь, а путь к самому скрипту. Например, если в командной строке мы находимся в test/folder и запускаем команду python ./packA/subA/subA1.py , то sys.path будет включать в себя test/packA/subA/ , но не test/ .

        Кроме того, sys.path общий для всех импортируемых модулей. Допустим, мы вызвали python start.py . Пусть start.py импортирует packA.a1 , а a1.py выводит на экран sys.path . В таком случае sys.path будет включать test/ (путь к start.py ), но не test/packA (путь к a1.py ). Это значит, что a1.py может вызвать import other , так как other.py находится в test/ .

        Всё о __init__.py

        У файла __init__.py есть две функции:

        1. Превратить папку со скриптами в импортируемый пакет модулей (до Python 3.3).
        2. Выполнить код инициализации пакета.

        Превращение папки со скриптами в импортируемый пакет модулей

        Чтобы импортировать модуль (или пакет) из директории, которая находится не в директории нашего скрипта (или не в директории, из которой мы запускаем интерактивный интерпретатор), этот модуль должен быть в пакете.

        Как было сказано ранее, любая директория, содержащая файл __init__.py , является пакетом. Например, при работе с Python 2.7 start.py может импортировать пакет packA , но не packB , так как в директории test/packB/ нет файла __init__.py .

        Это не относится к Python 3.3 и выше благодаря появлению неявных пакетов пространств имён. Проще говоря, в Python 3.3+ все папки считаются пакетами, поэтому пустые файлы __init__.py больше не нужны.

        Допустим, packB — пакет пространства имён, так как в нём нет __init__.py . Если запустить интерактивную оболочку Python 3.6 в директории test/ , то мы увидим следующее:

        Выполнение кода инициализации пакета

        В момент, когда пакет или один из его модулей импортируется в первый раз, Python выполняет __init__.py в корне пакета, если такой файл существует. Все объекты и функции, определённые в __init__.py , считаются частью пространства имён пакета.

        Рассмотрим следующий пример:

        Вывод после запуска python start.py :

        Примечание Если a1.py вызовет import a2 , и мы запустим python a1.py , то test/packA/__init__.py не будет вызван, несмотря на то, что a2 вроде бы является частью пакета packA . Это связано с тем, что когда Python выполняет скрипт (в данном случае a1.py ), содержащая его папка не считается пакетом.

        Использование объектов из импортированного модуля или пакета

        Есть 4 разных вида импортов:

        1. import <пакет>
        2. import <модуль>
        3. from <пакет> import <модуль или подпакет или объект>
        4. from <модуль> import <объект>

        Пусть X — имя того, что идёт после import :

        • Если X — имя модуля или пакета, то для того, чтобы использовать объекты, определённые в X , придётся писать X.объект .
        • Если X — имя переменной, то её можно использовать напрямую.
        • Если X — имя функции, то её можно вызвать с помощью X() .

        Опционально после любого выражения import X можно добавить as Y . Это переименует X в Y в пределах скрипта. Учтите, что имя X с этого момента становится недействительным. Частым примером такой конструкции является import numpy as np .

        Аргументом для import может быть как одно имя, так и их список. Каждое из имён можно переименовать с помощью as . Например, следующее выражение будет действительно в start.py : import packA as pA, packA.a1, packA.subA.sa1 as sa1 .

        Пример: нужно в start.py импортировать функцию helloWorld() из sa1.py .

        • Решение 1: from packA.subA.sa1 import helloWorld . Мы можем вызвать функцию напрямую по имени: x = helloWorld() .
        • Решение 2: from packA.subA import sa1 или то же самое import packA.subA.sa1 as sa1 . Для использования функции нам нужно добавить перед её именем имя модуля: x = sa1.helloWorld() . Иногда такой подход предпочтительнее первого, так как становится ясно, из какого модуля взялась та или иная функция.
        • Решение 3: import packA.subA.sa1 . Для использования функции перед её именем нужно добавить полный путь: x = packA.subA.sa1.helloWorld() .

        Используем dir() для исследования содержимого импортированного модуля

        После импортирования модуля можно использовать функцию dir() для получения списка доступных в модуле имён. Допустим, мы импортируем sa1 . Если в sa1.py есть функция helloWorld() , то dir(sa1) будет включать helloWorld :

        Импортирование пакетов

        Импортирование пакета по сути равноценно импортированию его __init__.py . Вот как Python на самом деле видит пакет:

        После импорта становятся доступны только те объекты, что определены в __init__.py пакета. Поскольку в packB нет такого файла, от import packB (в Python 3.3.+) будет мало толку, так как никакие объекты из этого пакета не становятся доступны. Последующий вызов модуля packB.b1 приведёт к ошибке, так как он ещё не был импортирован.

        Абсолютный и относительный импорт

        При абсолютном импорте используется полный путь (от начала корневой папки проекта) к желаемому модулю.

        При относительном импорте используется относительный путь (начиная с пути текущего модуля) к желаемому модулю. Есть два типа относительных импортов:

        1. При явном импорте используется формат from .<модуль/пакет> import X , где символы точки . показывают, на сколько директорий «вверх» нужно подняться. Одна точка . показывает текущую директорию, две точки .. — на одну директорию выше и т. д.
        2. Неявный относительный импорт пишется так, как если бы текущая директория была частью sys.path . Такой тип импортов поддерживается только в Python 2.

        В документации Python об относительных импортах в Python 3 написано следующее:

        Единственный приемлемый синтаксис для относительных импортов — from .[модуль] import [имя] . Все импорты, которые начинаются не с точки . , считаются абсолютными.

        Источник: What’s New in Python 3.0

        В качестве примера допустим, что мы запускаем start.py , который импортирует a1 , который импортирует other , a2 и sa1 . Тогда импорты в a1.py будут выглядеть следующим образом:

        Явные относительные импорты:

        Неявные относительные импорты (не поддерживаются в Python 3):

        Учтите, что в относительных импортах с помощью точек . можно дойти только до директории, содержащей запущенный из командной строки скрипт (не включительно). Таким образом, from .. import other не сработает в a1.py . В результате мы получим ошибку ValueError: attempted relative import beyond top-level package .

        Как правило, абсолютные импорты предпочтительнее относительных. Они позволяют избежать путаницы между явными и неявными импортами. Кроме того, любой скрипт с явными относительными импортами нельзя запустить напрямую:

        Имейте в виду, что относительные импорты основаны на имени текущего модуля. Так как имя главного модуля всегда «__main__» , модули, которые должны использоваться как главный модуль приложения, должны всегда использовать абсолютные импорты.

        Источник: Python 2 и Python 3

        Примеры

        Пример 1: sys.path известен заранее

        Если вы собираетесь вызывать только python start.py или python other.py , то прописать импорты всем модулям не составит труда. В данном случае sys.path всегда будет включать папку test/ . Таким образом, все импорты можно писать относительно этой папки.

        Пример: файлу в проекте test нужно импортировать функцию helloWorld() из sa1.py .

        Решение: from packA.subA.sa1 import helloWorld (или любой другой эквивалентный синтаксис импорта).

        Пример 2: sys.path мог измениться

        Зачастую нам требуется как запускать скрипт напрямую из командной строки, так и импортировать его как модуль в другом скрипте. Как вы увидите далее, здесь могут возникнуть проблемы, особенно в Python 3.

        Пример: пусть start.py нужно импортировать a2 , которому нужно импортировать sa2 . Предположим, что start.py всегда запускается напрямую, а не импортируется. Также мы хотим иметь возможность запускать a2 напрямую.

        Звучит просто, не так ли? Нам всего лишь нужно выполнить два импорта: один в start.py и другой в a2.py .

        Проблема: это один из тех случаев, когда sys.path меняется. Когда мы выполняем start.py , sys.path содержит test/ , а при выполнении a2.py sys.path содержит test/packA/ .

        С импортом в start.py нет никаких проблем. Так как этот модуль всегда запускается напрямую, мы знаем, что при его выполнении в sys.path всегда будет test/ . Тогда импортировать a2 можно просто с помощью import packA.a2 .

        С импортом в a2.py немного сложнее. Когда мы запускаем start.py напрямую, sys.path содержит test/ , поэтому в a2.py импорт будет выглядеть как from packA.subA import sa2 . Однако если запустить a2.py напрямую, то в sys.path уже будет test/packA/ . Теперь импорт вызовет ошибку, так как packA не является папкой внутри test/packA/ .

        Вместо этого мы могли бы попробовать from subA import sa2 . Это решает проблему при запуске a2.py напрямую, однако теперь создаёт проблему при запуске start.py . В Python 3 это приведёт к ошибке, потому что subA не находится в sys.path (в Python 2 это не вызовет проблемы из-за поддержки неявных относительных импортов).

        Запускаем from packA.subA import sa2 from subA import sa2
        start.py Нет проблем В Py2 нет проблем, в Py3 ошибка ( subA не в test/ )
        a2.py Ошибка ( packA не в test/packA/ ) Нет проблем

        Использование относительного импорта from .subA import sa2 будет иметь тот же эффект, что и from packA.subA import sa2 .

        Вряд ли для этой проблемы есть чистое решение, поэтому вот несколько обходных путей:

        1. Использовать абсолютные импорты относительно директории test/ (т. е. средняя колонка в таблице выше). Это гарантирует, что запуск start.py напрямую всегда сработает. Чтобы запустить a2.py напрямую, запустите его как импортируемый модуль, а не как скрипт:

        1. В консоли смените директорию на test/ .
        2. Запустите python -m packA.a2 .

        2. Использовать абсолютные импорты относительно директории test/ (средняя колонка в таблице). Это гарантирует, что запуск start.py напрямую всегда сработает. Чтобы запустить a2.py напрямую, можно изменить sys.path в a2.py , чтобы включить test/packA/ перед импортом sa2 .

        Примечание Обычно этот метод работает, однако в некоторых случаях переменная __file__ может быть неправильной. В таком случае нужно использовать встроенный пакет inspect . Подробнее в этом ответе на StackOverflow.

        3. Использовать только Python 2 и неявные относительные импорты (последняя колонка в таблице).

        4. Использовать абсолютные импорты относительно директории test/ и добавить её в переменную среды PYTHONPATH . Это решение не переносимо, поэтому лучше не использовать его. О том, как добавить директорию в PYTHONPATH , читайте в этом ответе.

        Пример 3: sys.path мог измениться (вариант 2)

        А вот ещё одна проблема посложнее. Допустим, модуль a2.py никогда не надо запускать напрямую, но он импортируется start.py и a1.py , которые запускаются напрямую.

        В этом случае первое решение из примера выше не сработает. Тем не менее, всё ещё можно использовать остальные решения.

        Пример 4: импорт из родительской директории

        Если мы не изменяем PYTHONPATH и стараемся не изменять sys.path программно, то сталкиваемся со следующим основным ограничением импортов в Python: при запуске скрипта напрямую невозможно импортировать что-либо из его родительской директории.

        Например, если бы нам пришлось запустить python sa1.py , то этот модуль не смог бы ничего импортировать из a1.py без вмешательства в PYTHONPATH или sys.path .

        На первый взгляд может показаться, что относительные импорты (например from .. import a1 ) помогут решить эту проблему. Однако запускаемый скрипт (в данном случае sa1.py ) считается «модулем верхнего уровня». Попытка импортировать что-либо из директории над этим скриптом приведёт к ошибке ValueError: attempted relative import beyond top-level package .

        Для решения этой проблемы лучше её не создавать и избегать написания скриптов, которые импортируют из родительской директории. Если этого нельзя избежать, то предпочтительным обходным путём является изменение sys.path .

        Python 2 vs Python 3

        Мы разобрали основные отличия импортов в Python 2 и Python 3. Они ещё раз изложены здесь наряду с менее важными отличиями:

        Импорт модулей

        import module будет импортировать модуль , а затем позволяют ссылаться на свои объекты — ценности, функции и классы, например — с помощью module.name синтаксиса. В приведенном выше примере, то random образом модуль импортируется, который содержит randint функцию. Таким образом , за счет импорта random образом вы можете вызвать randint с random.randint .

        Вы можете импортировать модуль и назначить ему другое имя:

        Если ваш питон файл main.py находится в той же папке, custom.py .Вы можете импортировать это так:

        Также возможно импортировать функцию из модуля:

        Чтобы импортировать определенные функции глубже в модуль, оператор точки может быть использован только на левой стороне import ключевого слова:

        В python у нас есть два способа вызвать функцию с верхнего уровня. Одним из них является import и другое from .Мы должны использовать import , когда мы имеем возможность коллизии имен. Предположим , что мы имеем hello.py файл и world.py файлы , имеющие ту же самую функцию с именем function .Тогда import заявление будет хорошо работать.

        В общем import предоставит вам пространство имен.

        Но если вы достаточно уверены, в целом вашего проекта нет никакого способа , имеющий такое же имя функции следует использовать from заявлением

        Многократный импорт может быть выполнен в одной строке:

        Ключевые слова и синтаксис, показанные выше, также могут использоваться в комбинациях:

        Импорт определенных имен из модуля

        Вместо импорта всего модуля вы можете импортировать только указанные имена:

        from random необходимо, так как интерпретатор питона должен знать , из какого ресурса он должен импортировать функции или класс и import randint определяет функцию или сам класс.

        Еще один пример ниже (аналогичный приведенному выше):

        Следующий пример вызовет ошибку, потому что мы не импортировали модуль:

        Интерпретатор питона не понимает , что вы имеете в виду с random .Он должен быть объявлен добавлением import random к примеру:

        Импорт всех имен из модуля

        Это будет импортировать все имена , определенные в math модуле в глобальное пространство имен, кроме имен , которые начинаются с символа подчеркивания (что свидетельствует о том , что писатель чувствует , что это только для внутреннего использования).

        Внимание: Если функция с тем же именем уже определена или импортирована, он будет перезаписан. Почти всегда импортировать только конкретные имена from math import sqrt, ceil является рекомендуемым способом:

        Помеченный импорт разрешен только на уровне модуля. Попытки выполнить их в определениях класса или функции приводит к SyntaxError .

        оба терпят неудачу с:

        Специальная переменная __all__

        Модули могут иметь специальную переменную __all__ , чтобы ограничить , какие переменные импортируются при использовании from mymodule import * .

        Дан следующий модуль:

        Только imported_by_star импортируется при использовании from mymodule import * :

        Тем не менее, not_imported_by_star может быть импортирован в явном виде:

        Программный импорт

        Чтобы импортировать модуль через вызов функции, используйте модуль `importlib` (включен в Python начиная с версии 2.7): import importlib random = importlib.import_module (» random «) Функция` importlib.import_module () `также импортирует Подмодуль пакета напрямую: collection_abc = importlib.import_module («collection.abc»)

        Для более старых версий Python, используйте imp модуль. Используйте функцию imp.find_module и imp.load_module выполнять программный импорт.

        Взятые из стандартной документации библиотеки

        Не используйте __import__() программно импортировать модули! Есть тонкие детали , связанные с sys.modules , в fromlist аргумент и т.д., которые легко упустить из виду , который importlib.import_module() ручки для вас.

        Импорт модулей из произвольного расположения файловой системы

        Если вы хотите импортировать модуль , который уже не существует , как встроенный модуль в стандартной библиотеке Python , ни в качестве побочного пакета, вы можете сделать это, добавив путь к директории , где ваш модуль найден в sys.path .Это может быть полезно, когда на хосте существует несколько сред Python.

        Важно , чтобы вы добавить путь к каталогу , в котором mymodule найден, а не путь к самому модулю.

        Правила PEP8 для импорта

        Некоторые рекомендуемые PEP8 принципы стиля для импорта:

        Импорт должен быть в отдельных строках:

        Порядок импорта в верхней части модуля выглядит следующим образом:

        • Импорт стандартной библиотеки
        • Связанный импорт третьей стороны
        • Локальный импорт приложений / библиотек
        1. Следует избегать импорта подстановочных знаков, поскольку это приводит к путанице в именах в текущем пространстве имен. Если вы from module import * , он может быть нечетким , если конкретное имя в коде происходит от module или нет. Это вдвойне верно , если у вас есть несколько from module import * отчетности -типа.
        2. Избегайте использования относительного импорта; вместо этого используйте явный импорт.

        Импорт подмодулей

        Это импортирует function из module.submodule .

        __import __ () функция

        __import__() функция может быть использована для импорта модулей , где имя известно лишь во время выполнения

        Эту функцию также можно использовать для указания пути к файлу модуля

        Повторный импорт модуля

        При использовании интерактивного переводчика вы можете перезагрузить модуль. Это может быть полезно, если вы редактируете модуль и хотите импортировать новейшую версию, или если вы исправили элемент существующего модуля и хотите отменить изменения.

        Обратите внимание , что вы не можете просто import модуль еще раз , чтобы вернуться:

        Это потому, что интерпретатор регистрирует каждый импортируемый вами модуль. И когда вы пытаетесь повторно импортировать модуль, интерпретатор видит его в реестре и ничего не делает. Так трудный путь реимпортировать является использование import после удаления соответствующего пункта из реестра:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *