Вход
Русский
USD
Цены в иностранной валюте приведены информационно

Создание модулей Python 3

Как самому создавать и импортировать модули?

Модулями называют файлы с .ру расширением, которые содержат код Python. Вы можете сослаться на любой такой файл, как на модуль. Вы можете найти их в Python Standard Library. Кроме того, некоторые модули по умолчанию загружаются вместе с Python. Вы можете также поставить необходимые модули посредством пакетного менеджера pip. Вы также сможете самостоятельно писать свои модули на Python. Наше руководство поможет вам это сделать.

Создание и импорт модулей

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

Как же написать модуль? Сначала потребуется развернуть среду разработки. В ней создайте файл с расширением .py, например hello.py. Вы сможете потом импортировать его в другой файл. Внутрь нужно записать функцию:

def world():
print("Hello, World!")

Вы также можете запустить файл командой:

python hello.py

В той же папке необходимо создать файл main_program.py. В него нужно импортировать созданный модуль, а потом вызывайте функцию. Файлы должны располагаться в одном каталоге, ведь модуль не встроенный. Иначе Python не сможет его найти. Наберите:

# Импортируйте модуль hello
import hello
# Вызовите функцию
hello.world()

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

rom hello import world

А потом вызвать его вот как world(). Теперь предстоит запустить программу через командную строку:

python main_program.py

И у вас в терминале появятся вот такие строки:

Hello, World!

Теперь мы с вами добавим переменную в модуль hello.py:

# Определите функцию
def world():
print("Hello, World!")
# Определите переменную
some = "some"

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

# Импортируйте модуль hello
import hello
# Вызовите функцию
hello.world()
# Отобразите переменную
print(hello.some)

Теперь при запуске программы на экране будет вот такая надпись:

Hello, World!
some

Попробуем теперь переопределить класс в hello.py. Нам потребуется класс user, имеющий атрибуты mood и name. Нужна также функция, выводящая эти атрибуты:

# Определите функцию
def world():
print("Hello, World!")
# Определите переменную
some = "some"
# Определите класс
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.some)
# Вызовите класс
jesse = hello.User("Jesse", "sad")
jesse.tell_me_about_the_user()

Если вызвать класс User посредством hello.User(), то получите доступ к атрибутам и функциям в именном пространстве файла main_program.py. Для этого на последней строке и пишется jesse.tell_me_about_the_user() без вызова hello. Без ссылки на данный модель получится также вызвать любой атрибут класса. При запуске приложения вы увидите:

Hello, World!
Some
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, при запуске которого и выполняется.

Доступ к модулям из иной папки

Вы можете использовать модули одновременно в нескольких программах либо проектах. В такой ситуации все держать в одной папке проблематично. Файлы проще всего хранить в отдельных папках проектов. Если вы хотите применить модуль из одного проекта в другом, то это получится сделать несколькими способами:

1) Добавить путь

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

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

Например, вы создали файл hello.py в папке /user/some/. При этом в старом каталоге у вас остался файл main_program.py. Для импорта модуля hello.py в main_program.py нужно перенести sys добавив путь /user/some/. По нему Python и сможет найти указанный файл. Наберите:

import sys
sys.path.append('/user/some/')
import hello
...

Если правильно задать путь к файлу hello.py, получится запустить без ошибок main_program.py. У нас будет такой же вывод, как и раньше.

2) Добавить модуль в путь Python

Такой вариант более удобный и его можно использовать постоянно. Вы добавляете модуль в путь, откуда Python берет пакеты и модули. Ваш модуль станет доступным в рамках всей системы. Сначала путь нужно будет узнать. Для этого запустите в среде разработки интерпретатор Python:

python

Проведите импорт модуля sys:

import sys

Теперь нужно с помощью функции отобразить путь Python:

print(sys.path)

Данная команда выведет хотя бы один системный путь. Однако в среде разработки можно получить сразу несколько путей. В таком случае вам придется определять нужный. Вы сможете добавить модули в общесистемный путь Python. Для этого:

'/user/some/my_env/lib/python3.6/site-packages'

В этот каталог нужно переместить файл hello.py. Далее импортируйте модуль hello:

import hello
...

Вы увидите, что программа теперь работает без ошибок.

Опубликовано: Апрель 13, 2017