Модуль importlib

Основы import и sys.path

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

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

Обратите внимание, что Python сначала производит поиск среди встроенных модулей — тех, которые встроены непосредственно в интерпретатор. Список встроенных модулей зависит от дистрибутива Python, а найти этот список можно в ( и )

Обычно в дистрибутивах есть модули (всегда включён в дистрибутив), , , и прочие.

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

Backend-разработчик (Python, Django)

Infatica.io, от 120 000 до 150 000 ₽

tproger.ru

Вакансии на tproger.ru

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

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

The import Statement

You can use any Python source file as a module by executing an import statement in some other Python source file. The import has the following syntax −

import module1

When the interpreter encounters an import statement, it imports the module if the module is present in the search path. A search path is a list of directories that the interpreter searches before importing a module. For example, to import the module support.py, you need to put the following command at the top of the script −

#!/usr/bin/python

# Import module support
import support

# Now you can call defined function that module as follows
support.print_func("Zara")

When the above code is executed, it produces the following result −

Hello : Zara

A module is loaded only once, regardless of the number of times it is imported. This prevents the module execution from happening over and over again if multiple imports occur.

Написание и импорт модулей

Написать модуль – то же самое, что написать любой другой файл Python. Модули могут содержать определения функций, классов и переменных, которые затем можно использовать в других программах Python. Давайте попробуем написать модуль.

  • Установка Python 3 и настройка среды разработки на сервере Ubuntu 16.04
  • Настройка локальной среды разработки для Python 3

Разверните среду разработки и создайте тестовый файл hello.py, который затем можно импортировать в другой файл. Добавьте в файл функцию:

Если запустить этот файл с помощью команды:

то ничего не произойдёт, так как он не говорит программе, что ей делать.

Теперь создайте в этом же каталоге файл main_program.py, импортируйте созданный модуль и вызовите функцию. Эти файлы должны находиться в одном каталоге, чтобы Python мог найти модуль (поскольку этот модуль не встроенный).

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

Также можно импортировать модуль так:

и вызвать функцию непосредственно как world().

Запустите программу в командной строке:

В терминале появится:

Теперь попробуйте добавить в модуль hello.py переменную.

Вызовите переменную в функции print() в файле main_program.py:

Попробуйте запустить программу. Вы получите такой результат:

Теперь попробуйте определить класс в файле hello.py. Создайте класс User с атрибутами name и mood и функцией, которая выведет атрибуты.

Затем добавьте класс в конец файла main_program.py:

Вызвав класс User с помощью hello.User(), вы можете получить доступ к функциям и атрибутам класса в пространстве имен файла main_program.py. Потому в последней строке можно написать jesse.tell_me_about_the_user(), не вызывая hello. Также можно вызвать один из атрибутов класса (к примеру, jesse.mood), не ссылаясь на модуль hello.

Запустив программу, вы получите такой вывод:

Важно иметь в виду, что хотя модули часто хранят определения, они также могут реализовать код. Чтобы увидеть, как это работает, перепишите файл hello.py так, чтобы он реализовал функцию world():. Теперь в файле main_program.py нужно удалить все строки, кроме выражения import:

Теперь в файле main_program.py нужно удалить все строки, кроме выражения import:

Запустите программу main_program.py, и вы получите:

Модуль hello реализует функцию world(), которая затем передаётся в main_program.py и выполняется при запуске main_program.py.

Packages in Python

A package is a hierarchical file directory structure that defines a single Python application environment that consists of modules and subpackages and sub-subpackages, and so on.

Consider a file Pots.py available in Phone directory. This file has following line of source code −

#!/usr/bin/python

def Pots():
   print "I'm Pots Phone"

Similar way, we have another two files having different functions with the same name as above −

  • Phone/Isdn.py file having function Isdn()

  • Phone/G3.py file having function G3()

Now, create one more file __init__.py in Phone directory −

Phone/__init__.py

To make all of your functions available when you’ve imported Phone, you need to put explicit import statements in __init__.py as follows −

from Pots import Pots
from Isdn import Isdn
from G3 import G3

After you add these lines to __init__.py, you have all of these classes available when you import the Phone package.

#!/usr/bin/python

# Now import your Phone Package.
import Phone

Phone.Pots()
Phone.Isdn()
Phone.G3()

When the above code is executed, it produces the following result −

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

In the above example, we have taken example of a single functions in each file, but you can keep multiple functions in your files. You can also define different Python classes in those files and then you can create your packages out of those classes.

Previous Page
Print Page

Next Page  

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

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