Модуль importlib

Содержание:

9.1.3. Особенности модулей в Python¶

Каждый модуль имеет специальные и дополнительные атрибуты.

  1. Специальные атрибуты содержат системную информацию о модуле (путь запуска, имя модуля и др.) и доступны всегда. Некоторые из них:

Python считается интерпретируемым языком, однако имеет : при запуске программы происходит компиляция в промежуточный байт-код (бинарный файл с расширением ) всех импортированных модулей, после чего код выполняется виртуальной машиной (Рисунок 9.1.1).

Рисунок 9.1.1 — Процесс выполнения Python-кода (для реализации CPython) .

Файл создается заново только в случае, если исходный код был изменен (проверяется дата изменения), иначе используется уже найденная «скомпилированная» версия. При этом компилируются только импортируемые модули (так, текущий запускаемый модуль скомпилирован не будет).

На Рисунке 9.1.2 приведена общая схема загрузки модуля.

Рисунок 9.1.2 — Процесс выполнения импорта Python с учетом «компиляции» .

Особенности -файлов:

  • имеют бинарный формат;

  • загружаются быстрее, чем исходные -файлы; при этом скорость выполнения одинакова в обоих случаях;

  • создаются в папке и имеют имя (для реализации CPython), где — версия Python;

  • «привязаны» к версии интерпретатора (обязательно в пределах основной версии — 2 или 3) и платформе компиляции.

Примечание

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

В то же время, применяется это не часто, т.к. в отличие от языков программирования, компилируемых непосредственно в машинный код (например, Си), для языков, использующих байт-код (Java, C#, Python и др.), высока вероятность полной декомпиляции (воссоздания исходного кода) скомпилированной программы.

Python предоставляет возможность создания собственных модулей.

Примечание

PEP8.

Соглашение рекомендует использовать:

  • змеиный_регистр (англ. snake_case) для наименования модулей: ;

Для создания собственных модулей нет особенных правил — любой файл с расширением является модулем. Пример создания и подключения собственного модуля приведен в Листинге 9.1.2 (а)-(б).

Листинг 9.1.2 (а) — Модуль вычисления чисел Фибоначчи (файл ) |

""" Модуль для работы с числами Фибоначчи.

- список чисел Фибоначчи, не превышающих 'n';
- проверка на вхождение в ряд Фибоначчи;
- ...
"""


def list_le_than(n):
    """Вернуть список чисел Фибоначчи, не превышающих 'n'."""
    assert isinstance(n, int) and n > 

    a, b = 1, 1
    result = a
    while b <= n
        result.append(b)
        a, b = b, a + b
    return result


def is_in_row(n):
    """Вернуть True, если 'n' - число Фибоначчи."""
    return n in list_le_than(n)

Листинг 9.1.2 (б) — Использование модуля (файл ) |

import fibonacci

num = 20
print("Числа до {}{}".format(num, fibonacci.list_le_than(num)))  # 
print("{} входит: {}".format(num, fibonacci.is_in_row(num)))  # False

Примечание

Основной модуль программы, как правило, удобно называть .

Архитектура программы

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

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

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

В приведенном выше примере top_module.py – это модуль верхнего уровня, который будет запускаться пользователем, и он импортирует инструменты из других модулей через module1.py. module1 и module2 являются определяемыми пользователем модулями, а модуль math импортируется из стандартной библиотеки. При запуске скрипта верхнего уровня получаем:

$ python top_module.py
k = 2 n = 5
10.0

Когда запускается файл Python верхнего уровня, его операторы исходного кода и операторы в импортированных модулях компилируются в промежуточный формат, известный как байт код, который является независимым от платформы. Файлы байт кода импортированных модулей хранятся с расширением .pyc в том же каталоге, что и .py-файл для версий Python до 3.2, и в каталоге __pycache__/ в текущем каталоге программы в Python 3.2+.

ID3 Handling

  • Mutagen — Mutagen is a Python module to handle audio metadata. It supports FLAC, M4A, Musepack, MP3, Ogg FLAC, Ogg Speex, Ogg Theora, Ogg Vorbis, True Audio, and WavPack audio files. All versions of ID3v2 are supported, and all standard ID3v2.4 frames are parsed. It can read Xing headers to accurately calculate the bitrate and length of MP3s. ID3 and APEv2 tags can be edited regardless of audio format. It can also manipulate Ogg streams on an individual packet/page level. It only writes ID3v2.4 (introduced in 2000, but as of Windows 8 still not supported by MediaPlayer).

  • ID3Reader — «Id3reader.py is a Python module that reads ID3 metadata tags in MP3 files. It can read ID3v1, ID3v2.2, ID3v2.3, or ID3v2.4 tags. It does not write tags at all» (from site). Used in ID3Writer. Does not work with Python 3000. Not maintained since 2006.

  • PyID3 — «»(Appears to be inactive)»»Module for manipulating ID3 informational tags in MP3 audio files. Not as good as ID3Writer, but no issues w/ genre, unlike ID3Writer. Not maintained since 2007.

  • pytagger — tag reader and writer implemented purely in Python. Supports ID3v1, ID3v1.1, ID3v2.2, ID3v2.3 and ID3v2.4

  • eyeD3 — is a Python module and program for processing ID3 tags. It can extract information such as bit rate, sample frequency, play time, etc. It supports ID3 v1.0/v1.1 and v2.3/v2.4.

  • — Py3k — hsaudiotag is a pure Python library that lets you read metadata (bitrate, sample rate, duration and tags) from mp3, mp4, wma, ogg, flac and aiff files. It can only read tags, not write to them, but unlike more complete libraries (like Mutagen), it is BSD licensed.

  • pytaglib — Python 3.x and 2.x support — bindings to the C++ taglib library, reads and writes mp3, ogg, flac, mpc, speex, opus, WavPack, TrueAudio, wav, aiff, mp4 and asf files.

TPC Connection Methods

(xid)

Begins a TPC transaction with the given transaction ID xid.

This method should be called outside of a transaction (i.e.
nothing may have executed since the last or
).

Furthermore, it is an error to call or
within the TPC transaction. A is raised, if the
application calls or during an active
TPC transaction.

If the database connection does not support TPC, a
is raised.

()

Performs the first phase of a transaction started with
. A should be raised if this
method outside of a TPC transaction.

After calling , no statements can be executed
until or have been called.

()

When called with no arguments, commits a TPC
transaction previously prepared with .

If is called prior to , a single
phase commit is performed. A transaction manager may choose to do
this if only a single resource is participating in the global
transaction.

When called with a transaction ID xid, the database commits the
given transaction. If an invalid transaction ID is provided, a
will be raised. This form should be called
outside of a transaction, and is intended for use in recovery.

On return, the TPC transaction is ended.

()

When called with no arguments, rolls back a TPC
transaction. It may be called before or after .

When called with a transaction ID xid, it rolls back the given
transaction. If an invalid transaction ID is provided, a
is raised. This form should be called outside
of a transaction, and is intended for use in recovery.

On return, the TPC transaction is ended.

()

Returns a list of pending transaction IDs suitable for use with
.tpc_commit(xid) or .tpc_rollback(xid).

If the database does not support transaction recovery, it may
return an empty list or raise .

Editorial Notes

Please avoid listing modules where…

  • You are one of the developers (and you just want to promote your work somewhere).
  • The modules in question do not have widespread approval or usage.

If you do want to make people aware of a module, package or library (perhaps your own), consider submitting it to one or more of the directories mentioned in PublishingPythonModules, perhaps also adding it to the topic-specific part of this site (eg. WebProgramming, GuiProgramming).

Do list modules that:

Get recommended often in the Tutor or comp.lang.python lists

Please provide a short description for each module. Try to put each module in the category that matches its «main» audience, since a module might fall into a number of categories.

Криптографические модули

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

В версии 2.5 структура криптобиблиотеки была унифицирована — все хеш-функции собраны в модуль и удалены бесполезные модули некриптостойкого шифрования.
Ранние модули , , объявлены устаревшими и будут удалены в одном из последующих релизов.

Использовать CryptoAPI-совместимые библиотеки достаточно просто:

 >>> import hashlib
 >>> m = hashlib.new('md5')      # создаем новый хеширующий объект с MD5 функцией
 >>> m = hashlib.md5()           # либо так
 >>> m.update("test data")       # добавляем данные
 >>> m.digest()
 '\xebs:\x00\xc0\xc9\xd36\xe6V\x91\xa3z\xb5B\x93'
 >>> m.hexdigest()
 'eb733a00c0c9d336e65691a37ab54293'

hashlib обеспечивает поддержку следующих хеш-функций: MD5, SHA-1, SHA224, SHA256, SHA384, SHA512 (в сборках Python со включённой библиотекой OpenSSL этот список шире). Следует отметить, что одно только присутствие алгоритма в стандартной библиотеке не гарантирует его криптографическую надёжность. Так, алгоритмы MD5 и SHA-1, по состоянию на начало 2007 года, не являются криптостойкими.

Сервисы периода исполнения

Модуль sys

В этом модуле содержатся функции и константы для взаимодействия с интерпретатором Python. В этом модуле, в том числе, содержатся следующие переменные:

  •  — аргументы командной строки,
  •  — порядок байтов платформы, или ,
  •  — объект, предоставляющий в виде атрибутов информацию о флагах, данных интерпретатору. Например, говорит о режиме отладки,
  •  — максимальное целое,
  •  — идентификатор платформы, например, ‘linux-i386’,
  • , ,  — стандартные потоки ввода, вывода и вывода ошибок,
  •  — строка с версией,

и другие.

Модуль также содержит несколько функций.

Модуль contextlib

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

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

with open('myfile.dat', 'wb') as fh
    fh.write('Мои данные')

В примере выше был использован встроенный в Python менеджер контекста. API менеджера контекста состоит из двух методов:

  • Метод вызывается при входе в блок . Возвращает объект, который получает параметр, заданный ,
  • Метод вызывается при выходе управления за пределы блока .

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

from contextlib import contextmanager
@contextmanager
def my_context():
    try
        yield myvalue  # значение для as
    except MyError, e
        # обработка исключения
    finally
        # выполняется при любом исходе

Модуль abc

Модуль определяет метакласс и декораторы и для определения новых абстрактных базовых классов (англ. abstract base class). Следует отметить, что абстрактный базовый класс понимается здесь в ином смысле, нежели в C++.

The from…import Statement

Python’s from statement lets you import specific attributes from a module into the current namespace. The from…import has the following syntax −

from modname import name1]

For example, to import the function fibonacci from the module fib, use the following statement −

#!/usr/bin/python3

# Fibonacci numbers module

def fib(n): # return Fibonacci series up to n
   result = []
   a, b = 0, 1
   while b < n:
      result.append(b)
      a, b = b, a + b
   return result
>>> from fib import fib
>>> fib(100)

This statement does not import the entire module fib into the current namespace; it just introduces the item fibonacci from the module fib into the global symbol
table of the importing module.

Python 2.0

The final version of Python 2.0 was released on October 16, 2000.

  • What’s new (overview)
  • (details)

Post-release news

For critical patches, a Python 2.0 specific FAQ, and other issues
that have come up since the release, please go to the new Python 2.0 info
area, a set of user-editable webpages. If you have information
about Python 2.0 you can discuss it there.

Download

The final version of Python 2.0 is available for download now.

Windows installer.

To install Python, Windows users need only download the Windows
installer and run it.

Source code (.tar.gz, 3.9MB) or

(.tar.bz2, 3.3MB)

Linux RPMs

Package Source (gzip) Source (bzip2) Source RPM RedHat 6.1 RPM
BeOpen-Python-2.0 .tar.gz .tar.bz2 .src.rpm .i386.rpm
expat-1.1 N/A N/A

.src.rpm

.i386.rpm

Tkinter-2.0-8.0 .tar.gz .tar.bz2 .src.rpm .i386.rpm

browse or download documentation

Notes for Windows users:

If you’re running Windows 95, 98, ME, NT or 2000, all you need is
the Windows installer. It includes Python, Tcl/Tk, and the
documentation in HTML format. Simply download the installer and run
it.

Some browsers remove the «.exe»
suffix of the downloaded installer file. If this happens to you,
simply rename the downloaded file to «python20.exe» before you
double-click it to run the installer. Also, if you have ever
installed an older Python version (especially distributions from
PythonWare), you may have to remove references to it from your
autoexec.bat.

Advanced Windows developers may also wish to download the Win32 extensions, by Mark Hammond of ActiveState. These make
many Microsoft Windows APIs available from Python.

Incompatibility warning: Norton Antivirus 2000 can cause
blue screen crashes on Windows 98 when a function in the os.popen*()
family is invoked. To prevent this problem, disable Norton Antivirus
when using Python. (Confirmed on Windows 98 Second Edition with
Norton Antivirus version 6.10.20. The same Norton Antivirus version
doesn’t have this problem on Windows 2000. Norton Antivirus version 5
on Windows 98SE doesn’t have this problem either.)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *