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

Вступление

Pythonmodules - это файлы.py, состоящие из кода Python. Любой файл Python может быть указан как модуль.

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

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

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

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

Из нашего Python 3local programming environment илиserver-based programming environment давайте начнем с создания файлаhello.py, который мы позже импортируем в другой файл.

Для начала мы введемcreate a function, который печатаетHello, World!:

hello.py

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

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

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

main_program.py

# Import hello module
import hello


# Call function
hello.world()

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

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

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

python main_program.py

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

OutputHello, World!

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

hello.py

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

# Define a variable
shark = "Sammy"

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

main_program.py

# Import hello module
import hello


# Call function
hello.world()

# Print variable
print(hello.shark)

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

OutputHello, World!
Sammy

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

hello.py

# 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:

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.

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

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

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

hello.py

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

# Call function within module
world()

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

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

main_program.py

# Import hello module
import hello

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

OutputHello, 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/sammy/ к пути, который Python проверяет на наличие файлов.

main_program.py

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

import hello
...

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

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

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

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

python

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

import sys

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

print(sys.path)

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

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

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

main_program.py

import hello
...

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

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

Заключение

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

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