Как написать свой модуль python

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

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

Подключение модуля из стандартной библиотеки

Подключить модуль можно с помощью инструкции import. К примеру, подключим модуль os для получения текущей директории:

>>> import os
>>> os.getcwd()
'C:\Python33'

После ключевого слова import указывается название модуля. Одной инструкцией можно подключить несколько модулей, хотя этого не рекомендуется делать, так как это снижает читаемость кода. Импортируем модули time и random.

>>> import time, random
>>> time.time()
1376047104.056417
>>> random.random()
0.9874550833306869

После импортирования модуля его название становится переменной, через которую можно получить доступ к атрибутам модуля. Например, можно обратиться к константе e, расположенной в модуле math:

>>> import math
>>> math.e
2.718281828459045

Стоит отметить, что если указанный атрибут модуля не будет найден, возбудится исключение AttributeError. А если не удастся найти модуль для импортирования, то ImportError.

>>> import notexist
Traceback (most recent call last):
  File "", line 1, in
    import notexist
ImportError: No module named 'notexist'
>>> import math
>>> math.Ё
Traceback (most recent call last):
  File "", line 1, in
    math.Ё
AttributeError: 'module' object has no attribute 'Ё'

Использование псевдонимов

Если название модуля слишком длинное, или оно вам не нравится по каким-то другим причинам, то для него можно создать псевдоним, с помощью ключевого слова as.

>>> import math as m
>>> m.e
2.718281828459045

Теперь доступ ко всем атрибутам модуля math осуществляется только с помощью переменной m, а переменной math в этой программе уже не будет (если, конечно, вы после этого не напишете import math, тогда модуль будет доступен как под именем m, так и под именем math).

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

from <Название модуля> import <Атрибут 1> [ as <Псевдоним 1> ], [<Атрибут 2> [ as <Псевдоним 2> ] ...]
from <Название модуля> import *

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

>>> from math import e, ceil as c
>>> e
2.718281828459045
>>> c(4.6)
5

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

>>> from math import (sin, cos,
...           tan, atan)

Второй формат инструкции from позволяет подключить все (точнее, почти все) переменные из модуля. Для примера импортируем все атрибуты из модуля sys:

>>> from sys import *
>>> version
'3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)]'
>>> version_info
sys.version_info(major=3, minor=3, micro=2, releaselevel='final', serial=0)

Следует заметить, что не все атрибуты будут импортированы. Если в модуле определена переменная __all__ (список атрибутов, которые могут быть подключены), то будут подключены только атрибуты из этого списка. Если переменная __all__ не определена, то будут подключены все атрибуты, не начинающиеся с нижнего подчёркивания. Кроме того, необходимо учитывать, что импортирование всех атрибутов из модуля может нарушить пространство имен главной программы, так как переменные, имеющие одинаковые имена, будут перезаписаны.

Создание своего модуля на Python

Теперь пришло время создать свой модуль. Создадим файл mymodule.py, в которой определим какие-нибудь функции:

def hello():
    print('Hello, world!')

def fib(n):
    a = b = 1
    for i in range(n - 2):
        a, b = b, a + b
    return b

Теперь в этой же папке создадим другой файл, например, main.py:

import mymodule

mymodule.hello()
print(mymodule.fib(10))

Выведет:

Hello, world!
55

Поздравляю! Вы сделали свой модуль! Напоследок отвечу ещё на пару вопросов, связанных с созданием модулей:

Как назвать модуль?

Помните, что вы (или другие люди) будут его импортировать и использовать в качестве переменной. Модуль нельзя именовать также, как и ключевое слово (их список можно посмотреть тут). Также имена модулей нельзя начинать с цифры. И не стоит называть модуль также, как какую-либо из встроенных функций. То есть, конечно, можно, но это создаст большие неудобства при его последующем использовании.

Куда поместить модуль?

Туда, где его потом можно будет найти. Пути поиска модулей указаны в переменной sys.path. В него включены текущая директория (то есть модуль можно оставить в папке с основной программой), а также директории, в которых установлен python. Кроме того, переменную sys.path можно изменять вручную, что позволяет положить модуль в любое удобное для вас место (главное, не забыть в главной программе модифицировать sys.path).

Можно ли использовать модуль как самостоятельную программу?

Можно. Однако надо помнить, что при импортировании модуля его код выполняется полностью, то есть, если программа что-то печатает, то при её импортировании это будет напечатано. Этого можно избежать, если проверять, запущен ли скрипт как программа, или импортирован. Это можно сделать с помощью переменной __name__, которая определена в любой программе, и равна «__main__», если скрипт запущен в качестве главной программы, и имя, если он импортирован. Например, mymodule.py может выглядеть вот так:

def hello():
    print('Hello, world!')

def fib(n):
    a = b = 1
    for i in range(n - 2):
        a, b = b, a + b
    return b

if __name__ == "__main__":
    hello()
    for i in range(10):
        print(fib(i))

Для вставки кода на Python в комментарий заключайте его в теги <pre><code class=»python3″>Ваш код</code></pre>

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

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

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

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

Пример:

 
import module 

Предположим, что в модуле Python, то есть в модуле 1, присутствуют три функции, и мы хотим использовать только одну из них в нашем коде, тогда мы также можем импортировать только одну функцию, используя оператор from и import, как мы использовали ниже:

Пример:

 
import function1 from module1 

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

Написание модуля Python

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

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

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

Шаг 1. Написание работающей программы

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

 
# A default Python function for performing addition 
def addition(x, y): # Two variables as parameters 
    # Adding two variables and storing results in another variable 
    addValue = x + y 
    # Returning the addition result for two numbers 
    return addValue 

Шаг 2. Сохранение файла

Теперь, после написания программы сложения, как указано в первом шаге, мы сохраним файл с именем add.py в каталоге по умолчанию, назначенном Python.

Шаг 2. Сохранение файла

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

 
# Importing the adding module in the program 
import adding 
# Taking two input variables from the user 
a1 = int(input("Enter first integer variable: ")) 
a2 = int(input("Enter second integer variable: ")) 
# Adding the variables with the function of 'adding' module 
addResult = addition(a1, a2) 
# Printing the result in the output 
print("The sum of two integer variables given by you is: ", addResult) 

Вывод:

Enter first integer variable: 26 
Enter second integer variable: 24 
The sum of two integer variables given by you is: 50 

Объяснение:

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

Вывод

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

С помощью модуля Python мы можем сделать наш код логически организованным и сгруппировать аналогичный код в один модуль.

Изучаю Python вместе с вами, читаю, собираю и записываю информацию опытных программистов.

Modules are simply python code having functions, classes, variables. Any python file with .py extension can be referenced as a module. Although there are some modules available through the python standard library which are installed through python installation, Other modules can be installed using the pip installer, We can also create our own python module.

In this article, we will see how to create modules in python. 

Writing The Module

Any python code consisting of functions, classes, variables can be termed as a module. We will be writing a simple module that will be having a function, a class, and a variable.

Python

class Age:                    

    def __init__(self, name, years):    

        self.years = years

        self.name = name

    def getAge(self):                    

        print("The age of " + self.name +" is "+self.years)

def hello():                

  print('hello geeks!')

s = 'I love python!'            

Here in the above module, we have defined a class ‘Age’ having a __init__() and getAge() method which will be used to initialize the class object and getting the age of the object that would be passed, We have also defined a function hello() which will print ‘hello geeks!’ and also a string s which is ‘I love python!’.

We will name the above module made as mod.py and save it.

Importing The Module

Now we will discuss how to import a module and use its various functions, classes, variables from other python files. For this, we will make a file main.py in the same directory as mod.py. 

We will import the module with an import statement and use the functions, classes, variable as following:-

Using functions

For using the function from a module we will first import it and then will call the function with module_name.function_name(). For example, if we want to call the function hello() of mod.py in main.py we will first import mod.py and then call it with mod.hello().

Python

Output:

hello geeks!

Note: Please make sure that the main.py and mod.py are in the same directory.

We can also import only a separate function from a module to use it by writing: from module_name import function_name

And then call it directly. For example, if we want to call the function hello() of mod.py in main.py using the above method we will write the following code in main.py.

Python

from mod import hello         

hello()     

Output:

hello geeks!

Using Classes

We can use the classes to make various objects by module_name.class_name(). For example, if we want to create an object in main.py by the name ‘jack’ of class Age present in mod.py. We will write the following code in main.py:

Python

import mod          

jack = mod.Age('jack','21'

jack.getAge()                

Output:

The age of jack is 21

The way we imported only a particular function in the same way we can import only a particular class. The code for this will be:

Python

from mod import Age          

jack = Age('jack','21')    

jack.getAge()                

Output:

The age of jack is 21

Using Variables

For getting any variable from a module we have to first import the module, and then we can simply get it by module_name.variable_name. For example, if we want to print the variable with name s present in our mod.py module we will write the following code:

Python

Output:

I love python!

As we did for functions and classes in the same way we can import a particular variable from a module. For printing variable ‘s’ by this method the code will be:

Python

from mod import s         

print(s)    

Output:

I love python!

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

Содержание

  • Импорт модулей стандартной библиотеки
    • Использование псевдонимов
    • Импорт нескольких модулей
    • Инструкция from
  • Создание своего модуля питон
  • Задача: составление анаграмм
  • Домашнее задание

Импорт модулей стандартной библиотеки

Питон включает в себя обширную библиотеку модулей, в которых реализовано множество полезных функций. Далее в этом курсе мы будем применять и другие полезные модули: re для регулярных выражений, collections, содержащий множество удобных структур данных, os и shutil для управления файлами и папками.

Для использования модуля его нужно импортировать — попросить питон загрузить его и сделать его функции доступными для использования. Импорт осуществляется с помощью оператора import. Например, модуль random используется для генерации “случайных” чисел.

>>> import random
>>> # Теперь мы можем вызывать функции из модуля random, указав их имя после "random." с точкой
>>> random.randint(0, 5)  # выводит случайное целое число между 0 и 5 включительно
2
>>> random.choice('abcdef')  # выберает случайный элемент коллекции
'c'
>>> random.random()  # Выводит случайное число на полуинтервале [0, 1)
0.9131300358342321

Ещё один пример: модуль math, содержащий различные математические функции и константы

>>> math.cos(0)  # ошибка, модуль ещё не импортирован
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-4-9cdcc157d079> in <module>()
----> 1 math.cos(0)

NameError: name 'math' is not defined
>>> import math
>>> math.cos(0)
1.0
>>> math.asin(1)
1.5707963267948966
>>> math.e
2.718281828459045

Использование псевдонимов

Если название модуля слишком длинное и вы не хотите его писать каждый раз, когда используете какую-то функцию, вы можете импортировать этот модуль под псевдонимом с помощью as:

>>> import math as m
>>> m.factorial(5)
120

Импорт нескольких модулей

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

>>> import random, math
>>> math.sqrt(random.randint(0, 5))
2.23606797749979

Или:

import random
import math
>>> math.sqrt(random.randint(0, 5))
2.0

Инструкция from

Иногда в модуле бывает много разных функций, а вам нужно использовать только что-то одно (и, например, использовать много раз), тогда проще импортировать какую-то определенную функцию из этого модуля и (1) чуть-чуть сэкономить память, (2) короче синтаксис. Тогда синтаксис импорта будет следующий:

>>> from math import ceil, floor
>>> ceil(145.3)
146
>>> floor(145.6)
145

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

>>> from math import *
>>> sqrt(144)
12.0
>>> pi
3.141592653589793

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


Правило хорошего тона — импортировать модули вначале вашей программы, до любого другого кода и функций.

Создание своего модуля питон

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

Давайте напишем скрипт с парой функций и импортируем эти функции в другую программу.

Создадим программу mymodule.py:

def avg(numbers):
    if not numbers:
        return 0
    return sum(numbers) / len(numbers)


def myfactorial(n):
    if n == 1:
        return n
    elif n < 1:
        return ("NA")
    else:
        return n * myfactorial(n-1)

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

Файл myscript.py:

import mymodule

n = input("Введите число: ")
my_list = [1] * (int(n)/2) + [2] * (int(n)/2)

print(mymodule.avg(my_list))
print(mymodule.myfactorial(int(n)))

Кстати, найдите баг в этом коде:

>>> [1] * (5/2)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-35-f37e9b720bb2> in <module>
----> 1 [1] * (5/2)

TypeError: can't multiply sequence by non-int of type 'float'
>>> [1] * (5//2)
[1, 1]

Задача: составление анаграмм

В качестве примера использования функций и модуля стандартной библиотеки random рассмотрим задачу составления анаграмм. В качестве входного файла будем использовать любой текст, из которого мы выберем слова. Пусть текст находится в файле text.txt и имеет следующее содержание (из Яндекс.Рефератов):

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

Задача состоит в том, что необходимо составить файл формата TSV, состоящий из 4 колонок: слово из файла и три его случайных анаграммы. Для простоты анаграммы могут совпадать с самим словом или друг с другом. В итоге требуется получить файл table.tsv, который будет начинаться следующим образом:

субъект	ъсукебт	кутесъб	кеубътс
вызывает	езтавыыв	аыезыввт	ывеаывзт
мелодический	скйчмеелидио	диимечеслйок	мкееийлчосид
импульс	млсупьи	уьмипсл	льмпиус
пласт	сатпл	таслп	тпалс
...

Полный код для решения этой задачи может выглядеть следующим образом:

"""Эта программа собирает слова из text.txt и составляет список анаграмм из
них в таблице table.tsv"""

# Здесь мы импортируем модуль стандартной библиотеки random, в котором
# содержаться функции для работы с псевдослучайными числами.
# Правило хорошего тона — делать все импорты в начале вашей программы.
import random


def words_from_file(filename):
    """Принимает имя файла, а точнее его системный путь, и возвращает
    список слов в нем
    """
    with open(filename, encoding='utf-8') as f:  # открвываем файл
        text = f.read()  # прочитываем весь файл в строковую переменную
    text = text.replace('-', '')  # удаляем дефисы
    text = text.replace(',', '').replace('.', '')  # удаляем запятые и точки
    # Тут можно было почистить текст еще лучше
    text = text.lower()  # заменяем все заглавные на строчные
    words = text.split()  # получаем список слов
    return words  # возвращаем список слов


def anа(word):
    """Возвращает случайную анаграмму word"""
    # Функция random.sample(sequence, count) возвращает список из count
    # уникальных элементов последовательности (например списка или строки)
    # взятых в случайном порядке. Заметим, что каждый элемент не может быть
    # больше одного раза, а также напомним, что элементами строки являются
    # односимвольные строки.
    a = random.sample(word, len(word))  # получаем список перемешанных букв
    new_word = ''.join(a)  # объединяем элементы списка из букв в одну строку
    return new_word  # возвращаем анаграмму


def create_tsv_table(table_filename, words, n_anа):
    """Создает TSV-файл с именем table_filename со строками типа
    слово→анаграмма→анаграмма,...
    где список слов задается аргументом words, а число анаграмм — n_ana
    """
    with open(table_filename, 'w', encoding='utf-8') as f:  # открываем файл для записи
        for x in words:  # перебираем слова в переменной x
            f.write(x)  # запишем слово в файл
            for i in range(n_ana):  # n_ana раз создадим и запишем анаграмму
                f.write('t')  # запишем разделитель
                f.write(ana(x))  # запишем случайную анаграмму
            f.write('n')  # не забудем поставить символ конца строки перед следующей строкой

def main():
    words = words_from_file('text.txt')  # получаем список слов
    create_tsv_table('table.tsv', words, 3)  # создаем таблицу с тремя анаграммами в каждой строке


if __name__ == '__main__':
    main()

Домашнее задание

Пусть какая-то функция получает на вход список из 30 случайных целых чисел от 0 до 100, сгенерированных с помощью модуля random. В вариантах описана функция.

+1 балл для всех: ответьте коротко на вопрос “Почему модуль random на самом деле НЕ генерирует случайные числа?”

  1. Функция берёт два случайных числа из этого списка (с помощью модуля random) и считает по ним количество всевозможных сочетаний этих чисел с точки зрения теории вероятности, С из n по k (использовать функцию из модуля math – factorial). Количество сочетаний (в формате float) печатается. k должно быть меньше n

  2. Функция возвращает произведение значений списка. Нужно пользоваться модулем math. Руководствоваться надо тем, что exp(log(a) + log(b)) = a * b

  3. Функция возвращает строку из 30 букв. Список, полученный на вход, задает порядок букв в строке по номеру буквы в алфавите.

  4. Функция берёт из списка 4 случайных числа, условно принимает их за две точки в двумерном пространстве и возвращает евклидово расстояние между этими точками. Использовать модули random и math.

  5. Функция перемешивает список с помощью random.shuffle(), сравнивает его с исходным списком и возвращает количество индексов, значение элемента по которым поменялось. Запустите функцию в цикле 100 раз и напечатайте в скольки процентов случаев меняются все элементы списка.

  6. Функция возвращает среднее геометрическое списка. Вомпользуйтесь модулем math. Отдельно вне функции покажите, что ее результат лежит между минимальным и максимальным значениями списка для 20 случаев. (Для это нужно на каждой итерации генерировать подаваемый на вход список заново)

  7. Функция возвращает среднее арифметическое элементов списка, округлённое вверх. Используйте модуль math.

Введение

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

Установку модулей вручную мы рассматривали в нашем руководстве про Импорт модулей в Python 3.
С помощью этого руководство вы поймёте как:

  • Написать модуль;
  •  Доступ к модулям из других директорий;
  • Использование переменной среды;
  • Модуль в переменной среде Python 3.

Подготовка к работе

У вас должен быть настроен дистрибутив под управлением Debian/Ubuntu/CentOS, настройка пользователя с правами sudo. Настроенная виртуальная среда языка Python. Рекомендуем заранее подготовиться перед приступлением к работе.

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

Первым делом стоит проверить версию Python с помощью:

python3 --version

На текущий момент актуальная версия 3.10.6. Если у вас старая версия, то обновите индекс пакетов и пакетов программного обеспечения с помощью:

sudo apt update && apt upgrade -y

Запустим виртуальную среду и с помощью текстового редактора Vim создадим новый файл с названием testingFile.py и добавим следующие строчки кода в самом начале указав шебанг. Шебанг – с помощью #! указываем путь к интерпретатору Python, подробнее рассмотрено в нашей инструкции.

#!/usr/bin/env python
# Определение функции
def test():
print(“This is test file”)

Если запустим с помощью:

python3 testingFile.py

То получим пустой результат. Необходимо создать второй файл и назовём test2.py и откроем с помощью vim и импортируем testingFile.py в файл test2.py и вызовем функцию test.

vim test2.py
#!/usr/bin/env python3
#Импорт файла
import testingFile
#Вызов функции из файла testingFile
testingFile.test()

Получим следующий результат, как на рисунке 1.

1

Рисунок 1 – Вызов функции из импортированного модуля

Мы импортируем модуль без использования “from testingFile import test”, нам необходимо вызывать функцию с помощью использованием названия модуля. Использование from … import можно рассмотреть в нашей инструкции.

Рассмотрим использование переменных в нашем модуле, добавим строчку в самом низу:

#!/usr/bin/env python3
# Определение функции
def test():
print("This is test file")
#Присвоение значения переменной
name = "serverspace"

Далее в файле test2.py в конце добавим строку изменив наш код в следующий вид:

#!/usr/bin/env python3
#Импорт файла
import testingFile
#Вызов функции из файла testingFile
testingFile.test()
#Вызов функции печати с использованием переменной
print(testingFile.name)

Результат приведён на рисунке 2.

2

Рисунок 2 – Вызов переменной из модуля

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

#!/usr/bin/env python3
# Определение функции
def test():
print("This is test file")
#Присвоение значения переменной
name = "serverspace"
#Определение класса
class TestingClass:
def __init__ (self, name, age):
self.name = name
self.age = age
def tell_me_about_TestingClass(self):
print("this class is " + self.name + ".")
print(self.name + " is the testing's name")

Теперь с помощью файла test2.py вызовем функцию инициализации и информацию о классе:

#!/usr/bin/env python3
#Импорт модуля
import testingFile
#Вызов функции
testingFile.test()
#Вывод информации из другого модуля
print(testingFile.name)
#Вызов функций из класса
server = testingFile.TestingClass("testingserver", "30 y.o.")
server.tell_me_about_TestingClass()

Результат приведён на рисунке 3.

3

Рисунок 3 – Вызов функций из класса TestingClass

Для начала создаём переменную с названием “server”, вызываем класс из модуля testingFile.py, присваиваем значения для переменной name “testingserver” и значение “30 y.o.” для переменной age.

Важно иметь ввиду, что модуль является определением, но в то же время можно реализовывать код. Рассмотрим новый пример модуля в файле test3.py

#!/usr/bin/env python3
def TestHello():
print(“Testing Hello, World!”)
#Вызов функции в модуле
TestHello()

Импортируем модуль в файл test4.py и проверим вызов функции TestHello:

#!/usr/bin/env python3
import test3

Получим результат в соответствии с рисунком 4.

4

Рисунок 4 – Вызов функции из модуля

Причина простая, внутри файла test3.py, создаём функцию с названием TestHello и внутри него реализуем функцию печати текста. Затем вызываем созданную функцию и импортируем в файл test4.py. Таким образом с помощью запуска test4.py вызываем функцию печать текста из функции TestHello.

Доступ к модулям из других директорий

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

Использование переменной среды

Если модуль находится вне проекта, используем модуль sys и с его помощи укажем путь к среде, где находится файл с нужным модулем. Например, находясь в домашней директории создав файл test5.py, мы не сможем импортировать файл test3.py, который находится в директории с виртуальной средой. Рассмотрим, как указывать путь к файлу test3.py:

import sys
sys.path.append(‘/root/testing/’)
import test3

И получим успешный результат, как показано на рисунке 5.

5

Рисунок 5 – Полученный результат

Успешный результат можем получить при указании правильного пути к файлу test3.

Модуль в переменной среде Python 3

Данный метод считается эффективным решением, модуль получает доступность для всей среды и системы. Проверим какой путь проверяет Python с помощью команд

python3
import sys
print(sys.path)

Получим в результате пути проверки интерпретатора Python, как показано на рисунке 6.

6

Рисунок 6 – Общие пути проверки интерпретатора Python

Выбираем нужный путь и скопируем файл test3.py в нужный путь.

cp testing/test3.py /usr/lib/python3.10
python3 test5.py

В файле test5.py удалим импортирование модуля sys. Запустим код:


cat test5.py # чтобы удостовериться, что строка с импортированием sys удалён либо закомментирован
python3 test5.py

Получим результат как на рисунке 7.

7

Рисунок 7 – Получение доступа к модулю из общего пути

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

Выводы

В данной инструкции мы рассмотрели такие возможности как:

  • Создание модуля;
  • Импортирование созданного модуля;
  • Ссылаться на модуль с помощью импортирования модуля sys из находясь в другой директории;
  • Добавление созданного модуля в общий путь интерпретатора Python;
  • Получили информацию об общих путях при поиске модуля с помощью командного интерпретатора Python.

So, you’ve been learning Python for quite a while now. As a beginner, it is common practice to have a one-file program that has all the code organized with the use of classes and functions.

But as you get more advanced, and your code gets more complex, you need to learn to use multiple files.

What Exactly is a Python Module?

A Python module is a Python file that contains classes, methods, or variables that you’d like to include in your application.

A common practice that you’ll observe among advanced Python applications is reusable functions or classes combined in a file, and then imported in other parts of the program.

Python Module Example 1
Python Module Example 1

This is referred to as a Python module. This module can then be imported and the variables and functions can be reused multiple times without declaring or creating them every time.

[toc]

How to Create a Python Module?

It’s simple, but we’ll break it down into small chunks for you to understand it and be able to apply it in real-world scenarios.

1. Create a File Containing a Method

We’ll first create a basic method that adds two numbers which it accepts as parameters.

name = "AskPython"
def add(num1, num2):
        return num1 + num2

This is our module. The above code is simply a method that returns the sum of the two numbers that are passed to it. Save the above code as adder.py and we’ll move on to the next step.

2. Create the Main File to Import the Module

Our next step is to import custom python modules in our program. Now, this is exactly the same as importing any other module.

The only difference is that the module file is locally located instead of being in the system path.

import adder
nums = adder.add(5, 10)
print(nums)
Import Module Basics
This is the output that we’ll receive when the above program is run

In the above example, I’ve imported our “adder” file. You don’t need to add the “.py” extension while importing.

3. Importing Only One Function

Suppose in our module, we had multiple functions performing multiple tasks. But in the program that we are importing the module, we needed only one of those functions. Importing the entire module would be unnecessary.

In this case, we can make use of from and import together.

from adder import add

nums = add(5, 10)
print(nums)
Import Module Basics 1
Importing the function individually gives us the same output

As you can see, since we’re importing a specific function, Python allows us to use the function as if it was native to the file without having to reference it with the module name.

4. Using Variables From Our Module

You might have noticed the two variables in our module. We added those to demonstrate how variables can be directly imported from the module with their values intact.

import adder

nums = adder.add(5, 10)
print(nums)

print(adder.name)
Module Import Variables
Importing variables from modules

Importing Modules From Different Directory

You do not need to store the module in the same folder as your main file. That would become very inconvenient if there are a lot of files.

Also in case you’re importing a module to a different program, it will be difficult to use the module.

Instead, you can organize modules in folders, and still import them in the same manner as before. We’ll just have to make a small change to the import statement and everything else will run fine.

There are multiple ways we can import modules in our program which are not located in the root directory. Let’s start with the easy ones.

1. Import by Specifying Folder Name

The dot notation or from..import that we used above can be used to import modules that are located within a directory. Let’s place our “adder.py” module in a directory named modules.

Modules In Directory 1
Modules In Directory 1
import modules.adder as adder

nums = adder.add(5, 10)
print(nums)

print(adder.name)

In this example, we renamed our module name from “modules.adder” to “adder” using as.

The reason for that is without renaming, we’ll have to specify “modules.adder.add(5,10)” and so on every time we need to call a function from the module.

We do not need to rename a module in the import statement. We can also create a variable later in the program that holds the name of the module and use the variable to call functions within the module.

adder = modules.adder

This will work too, but declaring the new name right at the start of the program improves code readability making it easier for the next programmer who works on your piece of code.

Another way is to use from..import. This saves us from renaming the modules for use in the program. The only change I’ll need to make to my import command is to use from modules import adder

from modules import adder

nums = adder.add(5, 10)
print(nums)

print(adder.name)

2. Append The Path to sys.path

When importing modules, Python starts by looking into the predefined paths first to find a module that matches the name. The first directory it looks into is the current directory, after which it moves to the other listed directories.

Let’s print out the sys.path and see what paths Python is looking into.

import sys
print(sys.path)
Sys Path In Python Linux
Sys Path In Python Linux

The above output is generated on a Linux computer. You will get a different list of paths if you’re using a Windows computer.

Since the sys.path is a Python list, we can append paths to it.

import sys
sys.path.append("modules")
import adder

nums = adder.add(5, 10)
print(nums)

print(adder.name)

We imported the sys module and appended our “modules” directory to it. So any time you need to import a module in the modules directory within this program, you can simply specify the name and you should be good to start working.

3. Making a Module Available System-Wide

We printed out the sys.path in the above example. We know that Python will look into those directories by default irrespective of where your code is placed.

If we move our module to one of those directories, you will easily have access to the module from any program you create on your computer in the future.

Do note that when porting the program to a different system, you will need the module to be copied along. So for program-specific modules, it’s best to organize them in folders within the parent directory and import from there.

Conclusion

You should now be able to create your custom modules in Python and write multi-file programs. Remember, having code organized in multiple files with the use of classes is a far better option for code reusability.

Many functions that you need now, could be useful in a future application too and these individual modules that you’ve created would just need to be imported saving you hours of work in case of advanced applications.

Понравилась статья? Поделить с друзьями:

Не пропустите и эти статьи:

  • Как написать свой мод для сервера самп
  • Как написать свой мод для майнкрафт
  • Как написать свой мод для бесконечного лета
  • Как написать свой мод для minecraft
  • Как написать свой мессенджер на python

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии