Поиск по сайту:

Как писать модули в Python 3


Введение

Модули Python представляют собой файлы .py, содержащие код Python. На любой файл Python можно ссылаться как на модуль.

Некоторые модули доступны через установленный вместе с Python менеджер пакетов pip. Кроме того, вы можете создавать свои собственные модули Python, поскольку модули состоят из файлов Python .py.

Этот учебник поможет вам написать модули Python для использования в других файлах программирования.

Предпосылки

У вас должен быть установлен Python 3 и настроена среда программирования на вашем компьютере или сервере. Если у вас не настроена среда программирования, вы можете обратиться к руководствам по установке и настройке среды программирования на вашем сервере, подходящей для вашей операционной системы (Ubuntu, CentOS, Debian и т. д.).

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

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

Информация: Чтобы следовать примеру кода в этом руководстве, откройте интерактивную оболочку Python в вашей локальной системе, выполнив команду python3. Затем вы можете копировать, вставлять или редактировать примеры, добавляя их после приглашения >>>.

В нашей локальной среде программирования Python 3 или серверной среде программирования давайте начнем с создания файла hello.py, который позже импортируем в другой файл.

Для начала мы создадим функцию, которая печатает Hello, World!:

# Define a function
def world():
    print("Hello, World!")

Если мы запустим программу в командной строке с помощью python hello.py, ничего не произойдет, поскольку мы не сказали программе что-либо делать.

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

# Import hello module
import hello


# Call function
hello.world()

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

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

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

  1. python main_program.py

Когда мы это сделаем, мы получим следующий вывод:

Output
Hello, World!

Чтобы увидеть, как мы можем использовать переменные в модуле, давайте добавим определение переменной в наш файл hello.py:

# Define a function
def world():
    print("Hello, World!")

# Define a variable
shark = "Sammy"

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

# Import hello module
import hello


# Call function
hello.world()

# Print variable
print(hello.shark)

Как только мы снова запустим программу, мы получим следующий вывод:

Output
Hello, World! Sammy

Наконец, давайте также определим класс в файле hello.py. Мы создадим класс Octopus с атрибутами name и color и функцию, которая будет выводить атрибуты при вызове.

# Define a function
def world():
    print("Hello, World!")

# Define a variable
shark = "Sammy"


# Define a class
class Octopus:
    def __init__(self, name, color):
        self.color = color
        self.name = name

    def tell_me_about_the_octopus(self):
        print("This octopus is " + self.color + ".")
        print(self.name + " is the octopus's name.")

Теперь мы добавим класс в конец нашего файла main_program.py:

# Import hello module
import hello


# Call function
hello.world()

# Print variable
print(hello.shark)

# Call class
jesse = hello.Octopus("Jesse", "orange")
jesse.tell_me_about_the_octopus()

После вызова класса Octopus с помощью hello.Octopus() мы можем получить доступ к функциям и атрибутам класса в пространстве имен файла main_program.py. Это позволяет нам написать jesse.tell_me_about_the_octopus() в последней строке, не вызывая hello. Мы также могли бы, например, вызвать один из атрибутов класса, например jesse.color, не ссылаясь на имя модуля hello.

Когда мы запустим программу, мы получим следующий вывод:

Output
Hello, World! Sammy This octopus is orange. Jesse is the octopus's name.

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

# Define a function
def world():
    print("Hello, World!")

# Call function within module
world()

Мы также удалили другие определения в файле.

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

# Import hello module
import hello

Когда мы запустим main_program.py, мы получим следующий вывод:

Output
Hello, World!

Это связано с тем, что в модуле hello реализована функция world(), которая затем передается в main_program.py и выполняется, когда main_program.py работает.

Модуль — это программный файл Python, состоящий из определений или кода, который можно использовать в других программных файлах Python.

Доступ к модулям из другого каталога

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

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

Добавление путей

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

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

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

Например, предположим, что мы переместили файл hello.py, и теперь он находится по пути /usr/sammy/, а Файл main_program.py находится в другом каталоге.

В нашем файле main_program.py мы по-прежнему можем импортировать модуль hello, импортировав модуль sys и затем добавив /usr/< mark>sammy/ на путь, по которому Python проверяет наличие файлов.

import sys
sys.path.append('/usr/sammy/')

import hello
...

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

Добавление модуля в путь Python

Второй вариант, который у вас есть, — добавить модуль в путь, по которому Python проверяет наличие модулей и пакетов. Это более постоянное решение, которое делает модуль доступным для всей среды или системы, что делает этот метод более переносимым.

Чтобы узнать, какой путь проверяет Python, запустите интерпретатор Python из среды программирования:

  1. python3

Затем импортируйте модуль sys:

  1. import sys

Затем пусть Python распечатает системный путь:

  1. print(sys.path)

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

Output
'/usr/sammy/my_env/lib/python3.5/site-packages'

Теперь вы можете переместить файл hello.py в этот каталог. После этого вы можете импортировать модуль hello как обычно:

import hello
...

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

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

Заключение

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

Вы можете узнать больше об установке и импорте модулей, прочитав How To Import Modules in Python 3.