> **Источник:** https://python-all.ru/3.4/library/pickletools.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 32.13. [`pickletools`](https://python-all.ru/3.4/library/pickletools.html#module-pickletools) – Инструменты для разработчиков pickle

**Исходный код:** [Lib/pickletools.py](https://python-all.ru/src/3.4/Lib/pickletools.py)

---

Этот модуль содержит различные константы, связанные с внутренними деталями модуля [`pickle`](https://python-all.ru/3.4/library/pickle.html#module-pickle), несколько пространных комментариев о реализации и несколько полезных функций для анализа pickled-данных. Содержимое этого модуля полезно для разработчиков ядра Python, работающих над [`pickle`](https://python-all.ru/3.4/library/pickle.html#module-pickle); обычным пользователям модуля [`pickle`](https://python-all.ru/3.4/library/pickle.html#module-pickle) модуль [`pickletools`](https://python-all.ru/3.4/library/pickletools.html#module-pickletools), скорее всего, не понадобится.

## 32.13.1. Использование командной строки

Новое в версии 3.2.

При запуске из командной строки `python -m pickletools` дизассемблирует содержимое одного или нескольких pickle-файлов. Обратите внимание: если нужно увидеть Python-объект, хранящийся в pickle, а не детали формата pickle, лучше использовать `-m pickle`. Однако если pickle-файл, который требуется изучить, получен из ненадёжного источника, `-m pickletools` – более безопасный вариант, так как он не выполняет pickle-байткод.

Например, для кортежа `(1, 2)`, сериализованного в файл `x.pickle`:

```python
$ python -m pickle x.pickle
(1, 2)

$ python -m pickletools x.pickle
    0: \x80 PROTO      3
    2: K    BININT1    1
    4: K    BININT1    2
    6: \x86 TUPLE2
    7: q    BINPUT     0
    9: .    STOP
highest protocol among opcodes = 2
```

### 32.13.1.1. Параметры командной строки

#### `-a, --annotate`

Аннотирует каждую строку кратким описанием опкода.

#### `-o, --output=<file>`

Имя файла, в который должна быть записана информация.

#### `-l, --indentlevel=<num>`

Количество пробелов для отступа нового уровня MARK.

#### `-m, --memo`

При дизассемблировании нескольких объектов сохранять memo между сеансами дизассемблирования.

#### `-p, --preamble=<preamble>`

Если указано несколько pickle-файлов, выводить указанную преамбулу перед каждым дизассемблированием.

## 32.13.2. Программный интерфейс

#### `pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0)`

> Выводит символическое дизассемблирование pickle в файлоподобный объект
>
> *out*
>
> , по умолчанию –
>
> `sys.stdout`
>
> .
>
> *pickle*
>
> может быть строкой или файлоподобным объектом.
>
> *memo*
>
> может быть словарём Python, который будет использоваться как мемо pickle; его можно использовать для дизассемблирования нескольких pickle, созданных одним и тем же pickler. Последовательные уровни, обозначаемые опкодами
>
> `MARK`
>
> в потоке, отступают на
>
> *indentlevel*
>
> пробелов. Если
>
> *annotate*
>
> задано ненулевым, каждый опкод в выводе аннотируется кратким описанием. Значение
>
> *annotate*
>
> используется как подсказка для столбца, с которого должна начинаться аннотация.

Новое в версии 3.2: аргумент *annotate*.

#### `pickletools.genops(pickle)`

Предоставляет [*итератор*](https://python-all.ru/3.4/glossary.html#term-iterator) по всем опкодам в pickle, возвращая последовательность троек `(opcode, arg, pos)`. *opcode* – экземпляр класса `OpcodeInfo`; *arg* – декодированное значение аргумента опкода в виде Python-объекта; *pos* – позиция, в которой находится этот опкод. *pickle* может быть строкой или файлоподобным объектом.

#### `pickletools.optimize(picklestring)`

Возвращает новую эквивалентную pickle-строку после удаления неиспользуемых опкодов `PUT`. Оптимизированный pickle короче, требует меньше времени на передачу, меньше места для хранения и распаковывается быстрее.
