Модули Python – это файлы с расширением .py, которые содержат код Python. На любой файл Python можно сослаться как на модуль.
Некоторые модули вы можете найти в Python Standard Library, некоторые устанавливаются вместе с Python по умолчанию. Также модули можно установить с помощью менеджера пакетов pip. Более того, Python позволяет вам самостоятельно писать модули (поскольку модули состоят из файлов .py).
Читайте также: Импорт модулей в Python 3
Данное руководство научит вас создавать модули Python и использовать их внутри других файлов программы.
Написание и импорт модулей
Написать модуль – то же самое, что написать любой другой файл Python. Модули могут содержать определения функций, классов и переменных, которые затем можно использовать в других программах Python. Давайте попробуем написать модуль.
Читайте также:
- Установка Python 3 и настройка среды разработки на сервере Ubuntu 16.04
- Настройка локальной среды разработки для Python 3
Разверните среду разработки и создайте тестовый файл hello.py, который затем можно импортировать в другой файл. Добавьте в файл функцию:
def world():
print("Hello, World!")
Если запустить этот файл с помощью команды:
python hello.py
то ничего не произойдёт, так как он не говорит программе, что ей делать.
Теперь создайте в этом же каталоге файл main_program.py, импортируйте созданный модуль и вызовите функцию. Эти файлы должны находиться в одном каталоге, чтобы Python мог найти модуль (поскольку этот модуль не встроенный).
# Импортируйте модуль hello
import hello
# Вызовите функцию
hello.world()
Импортировав модуль, необходимо вызвать функцию с помощью ссылки на имя модуля в точечной нотации.
Также можно импортировать модуль так:
from hello import world
и вызвать функцию непосредственно как world().
Читайте также: Импорт модулей в Python 3
Запустите программу в командной строке:
python main_program.py
В терминале появится:
Hello, World!
Теперь попробуйте добавить в модуль hello.py переменную.
# Определите функцию
def world():
print("Hello, World!")
# Определите переменную
8host = "8Host"
Вызовите переменную в функции print() в файле main_program.py:
# Импортируйте модуль hello
import hello
# Вызовите функцию
hello.world()
# Отобразите переменную
print(hello.8host)
Попробуйте запустить программу. Вы получите такой результат:
Hello, World!
8Host
Теперь попробуйте определить класс в файле hello.py. Создайте класс User с атрибутами name и mood и функцией, которая выведет атрибуты.
# Определите функцию
def world():
print("Hello, World!")
# Определите переменную
8host = "8Host"
# Определите класс
class User:
def __init__(self, name, mood):
self.mood = mood
self.name = name
def tell_me_about_the_user(self):
print("This user is " + self.mood + ".")
print(self.name + " is the user's name.")
Затем добавьте класс в конец файла main_program.py:
# Импортируйте модуль hello
import hello
# Вызовите функцию
hello.world()
# Отобразите переменную
print(hello.8host)
# Вызовите класс
jesse = hello.User("Jesse", "sad")
jesse.tell_me_about_the_user()
Вызвав класс User с помощью hello.User(), вы можете получить доступ к функциям и атрибутам класса в пространстве имен файла main_program.py. Потому в последней строке можно написать jesse.tell_me_about_the_user(), не вызывая hello. Также можно вызвать один из атрибутов класса (к примеру, jesse.mood), не ссылаясь на модуль hello.
Запустив программу, вы получите такой вывод:
Hello, World!
8Host
This user is sad.
Jesse is the user's name.
Важно иметь в виду, что хотя модули часто хранят определения, они также могут реализовать код. Чтобы увидеть, как это работает, перепишите файл hello.py так, чтобы он реализовал функцию world():
# Определите функцию
def world():
print("Hello, World!")
# Вызовите функцию внутри модуля
world()
Теперь в файле main_program.py нужно удалить все строки, кроме выражения import:
import hello
Запустите программу main_program.py, и вы получите:
Hello, World!
Модуль hello реализует функцию world(), которая затем передаётся в main_program.py и выполняется при запуске main_program.py.
Доступ к модулям из другого каталога
Модули можно использовать сразу в нескольких проектах или программах. В таком случае держать все файлы в одном каталоге сложно и неудобно. Файлы лучше хранить в отдельных каталогах проектов.
Предположим, вы хотите использовать модуль одного проекта в другой программе. Этого можно достичь несколькими способами.
Добавление пути
Одним из вариантов является вызов пути модуля через программные файлы, которые используют этот модуль. Этот метод следует рассматривать скорее как временное решение на этапе разработки (это не позволяет сделать модуль доступным в рамках всей системы).
Чтобы добавить путь модуля в другой файл, импортируйте модуль sys вместе с другими модулями, которые вы хотите использовать в главном файле программы.
Модуль sys можно найти в Python Standard Library; sys предоставляет индивидуальные системные параметры и функции, с помощью которых вы можете установить путь требуемого модуля.
Предположим, вы переместили файл hello.py в /usr/8host/, а файл main_program.py остался в прежнем каталоге.
Чтобы импортировать модуль hello в файл main_program.py, импортируйте модуль sys и добавьте путь /usr/8host/, где Python сможет найти нужный файл.
import sys
sys.path.append('/usr/8host/')
import hello
...
Если вы правильно указали путь к файлу hello.py, вы сможете запустить файл main_program.py безо всяких ошибок и получите такой же вывод, как и раньше, когда оба файла хранились в одном каталоге.
Добавление модуля в путь Python
Второй вариант – это добавить модуль в путь, по которому Python ищет модули и пакеты. Это более удобное и гибкое решение, которое можно использовать на постоянной основе; так модуль станет доступным в рамках текущей среды или всей системы.
Чтобы узнать путь Python, запустите интерпретатор Python в среде разработки:
python
Импортируйте модуль sys:
import sys
Затем отобразите путь Python с помощью функции:
print(sys.path)
Эта команда выведет, по крайней мере, один системный путь. Если вы находитесь в среде разработки, вы можете получить несколько таких путей. Найдите путь для текущей среды; также можно добавить модуль в главный, общесистемный путь Python. Путь выглядит примерно так:
'/usr/8host/my_env/lib/python3.5/site-packages'
Переместите файл hello.py в этот каталог. После этого можно импортировать модуль hello стандартным образом:
import hello
...
Программа должна работать без ошибок.
Заключение
На самом деле, модули Python пишутся так же, как и любые другие файлы с расширением .py.
Теперь вы умеете писать определения внутри модуля, использовать эти определения в рамках другого файла Python и вызывать модули, хранящиеся в разных каталогах.
Читайте также: Импорт модулей в Python 3