# 32.13. `pickletools` — Ferramentas para desenvolvedores pickle

Código Fonte: Lib/pickletools.py

Este módulo contém várias constantes relacionadas aos detalhes íntimos do módulo `pickle`, alguns comentários extensos sobre a implementação e algumas funções úteis para analisar dados em conserva. O conteúdo deste módulo é útil para desenvolvedores do núcleo Python que estão trabalhando no `pickle`; usuários comuns do módulo `pickle` provavelmente não acharão o módulo `pickletools` relevante.

## 32.13.1. Uso na linha de comando

Novo na versão 3.2.

Quando chamado a partir da linha de comando, `python -m pickletools` irá desmontar o conteúdo de um ou mais arquivos pickle. Note que se você quiser ver o objeto Python armazenado no pickle ao invés dos detalhes do formato pickle, você pode usar `-m pickle`. No entanto, quando o arquivo pickle que você deseja examinar vem de uma fonte não confiável, `-m pickletools` é uma opção mais segura porque não executa bytecode pickle.

Por exemplo, com uma tupla `(1, 2)` tratada com pickling no arquivo `x.pickle`:

    $ 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. Opções da linha de comando

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

  Anota cada linha com uma descrição curta do código de operação.

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

  Nome de um arquivo no qual a saída deve ser escrita.

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

  O número de espaços em branco para indentar um novo nível MARK.

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

  Quando vários objetos são desmontados, preserva memo entre as desmontagens.

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

  Quando mais de um arquivo pickle for especificado, imprime o preâmbulo fornecido antes de cada desmontagem.

## 32.13.2. Interface programática

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

  Produz uma desmontagem simbólica do pickle para o objeto arquivo ou similar out, tendo como padrão `sys.stdout`. pickle pode ser uma string ou um objeto arquivo ou similar. memo pode ser um dicionário Python que será usado como memo do pickle; ele pode ser usado para realizar desmontagens em vários pickles criados pelo mesmo pickler. Níveis sucessivos, indicados por códigos de operação `MARK` no fluxo, são indentados por espaços indentlevel. Se um valor diferente de zero for fornecido para annotate, cada código de operação na saída será anotado com uma breve descrição. O valor de annotate é usado como uma dica para a coluna onde a anotação deve começar.

  Novo na versão 3.2: O argumento annotate.

`pickletools.``genops`(pickle)

  Fornece um iterador sobre todos os códigos de operação em um pickle, retornando uma sequência de triplos `(opcode, arg, pos)`. opcode é uma instância de uma classe `OpcodeInfo`; arg é o valor decodificado, como um objeto Python, do argumento do opcode; pos é a posição em que este código de operação está localizado. pickle pode ser uma string ou um objeto arquivo ou similar.

`pickletools.``optimize`(picklestring)

  Retorna uma nova string pickle equivalente após eliminar códigos de operação `PUT` não utilizados. O pickle otimizado é mais curto, leva menos tempo de transmissão, requer menos espaço de armazenamento e efetua unpickling com mais eficiência.