pickletools.md
1> **Источник:** https://python-all.ru/3.8/library/pickletools.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`pickletools`](https://python-all.ru/3.8/library/pickletools.html#module-pickletools) – утилиты для разработчиков pickle89**Исходный код:** [Lib/pickletools.py](https://python-all.ru/src/3.8/Lib/pickletools.py)1011---1213Этот модуль содержит различные константы, касающиеся внутренних деталей модуля [`pickle`](https://python-all.ru/3.8/library/pickle.html#module-pickle), несколько пространных комментариев о реализации и несколько полезных функций для анализа данных, сериализованных с помощью pickle. Содержимое этого модуля может быть полезно разработчикам ядра Python, работающим над [`pickle`](https://python-all.ru/3.8/library/pickle.html#module-pickle); обычным пользователям модуля [`pickle`](https://python-all.ru/3.8/library/pickle.html#module-pickle) модуль [`pickletools`](https://python-all.ru/3.8/library/pickletools.html#module-pickletools), скорее всего, не нужен.1415## Использование командной строки1617Новое в версии 3.2.1819При запуске из командной строки `python -m pickletools` дизассемблирует содержимое одного или нескольких pickle-файлов. Обратите внимание: чтобы увидеть объект Python, хранящийся в pickle, а не детали формата pickle, лучше воспользоваться `-m pickle`. Однако если файл pickle, который требуется изучить, поступает из ненадёжного источника, `-m pickletools` является более безопасным вариантом, поскольку не выполняет байткод pickle.2021Например, с кортежем `(1, 2)`, сериализованным в файл `x.pickle`:2223```console24$ python -m pickle x.pickle25(1, 2)2627$ python -m pickletools x.pickle28 0: \x80 PROTO 329 2: K BININT1 130 4: K BININT1 231 6: \x86 TUPLE232 7: q BINPUT 033 9: . STOP34highest protocol among opcodes = 235```3637### Параметры командной строки3839#### `-a, --annotate`4041Аннотирует каждую строку кратким описанием опкода.4243#### `-o, --output=<file>`4445Имя файла, в который должна быть записана информация.4647#### `-l, --indentlevel=<num>`4849Количество пробелов для отступа нового уровня MARK.5051#### `-m, --memo`5253При дизассемблировании нескольких объектов сохранять memo между сеансами дизассемблирования.5455#### `-p, --preamble=<preamble>`5657Если указано несколько pickle-файлов, выводить указанную преамбулу перед каждым дизассемблированием.5859## Программный интерфейс6061#### `pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0)`6263Выводит символьное дизассемблирование pickle в файлоподобный объект *out*, по умолчанию `sys.stdout`. *pickle* может быть строкой или файлоподобным объектом. *memo* может быть словарём Python, который будет использоваться как memo pickle; его можно использовать для дизассемблирования нескольких pickle-файлов, созданных одним и тем же pickler. Последовательные уровни, обозначенные опкодами `MARK` в потоке, получают отступ в *indentlevel* пробелов. Если *annotate* задано ненулевое значение, каждый опкод в выводе аннотируется кратким описанием. Значение *annotate* используется как подсказка для столбца, с которого должна начинаться аннотация.6465Новое в версии 3.2: аргумент *annotate*.6667#### `pickletools.genops(pickle)`6869Предоставляет [итератор](https://python-all.ru/3.8/glossary.html#term-iterator) по всем опкодам в pickle, возвращая последовательность троек `(opcode, arg, pos)`. *opcode* – экземпляр класса `OpcodeInfo`; *arg* – это декодированное значение (как объект Python) аргумента опкода; *pos* – позиция, на которой находится этот опкод. *pickle* может быть строкой или файлоподобным объектом.7071#### `pickletools.optimize(picklestring)`7273Возвращает новую эквивалентную pickle-строку после удаления неиспользуемых опкодов `PUT`. Оптимизированный pickle короче, занимает меньше времени на передачу, требует меньше места при хранении и распаковывается более эффективно.74