Vantagens:
Primeiro: ofuscação leve e derrotável.
Segundo: se a compilação resultar em um arquivo significativamente menor, você obterá tempos de carregamento mais rápidos. Bom para a web.
Terceiro: Python pode pular a etapa de compilação. Mais rápido na carga inicial. Bom para a CPU e a web.
Quarto: quanto mais você comentar, menor será o arquivo .pycou .pyoem comparação com o .pyarquivo de origem .
Quinto: é muito menos provável que um usuário final com apenas um arquivo .pycou .pyona mão apresente um bug causado por uma alteração não revertida da qual se esqueceu de falar.
Sexto: se você está buscando um sistema incorporado, obter um arquivo de tamanho menor para incorporar pode representar uma vantagem significativa, e a arquitetura é estável, de modo que a desvantagem, detalhada abaixo, não entra em jogo.
Compilação de nível superior
É útil saber que você pode compilar um arquivo de origem python de nível superior em um .pycarquivo da seguinte maneira:
python -m py_compile myscript.py
Isso remove os comentários. Deixa docstringsintacto. Se você também quiser se livrar do problema docstrings(pense seriamente no motivo de fazer isso), compile dessa maneira ...
python -OO -m py_compile myscript.py
... e você obterá um .pyoarquivo em vez de um .pycarquivo; igualmente distribuível em termos de funcionalidade essencial do código, mas menor pelo tamanho do despojado docstrings(e menos facilmente compreendido para emprego subsequente se tivesse decente docstringsem primeiro lugar). Mas veja a desvantagem três, abaixo.
Note-se que python usa a .pydata do arquivo, se ele estiver presente, para decidir se ele deve executar o .pyarquivo em oposição ao .pycou .pyoarquivo --- então editar o arquivo .py, ea .pycou .pyoé obsoleto e tudo o que os benefícios que você ganhou são perdidas. Você precisa recompilar-lo, a fim de obter o .pycou .pyobenefícios de volta novamente, como eles podem ser.
Desvantagens:
Primeiro: há um "cookie mágico" .pyce os .pyoarquivos que indicam a arquitetura do sistema em que o arquivo python foi compilado. Se você distribuir um desses arquivos em um ambiente de um tipo diferente, ele será interrompido. Se você distribuir o .pycou .pyosem o associado .pypara recompilar ou touchsubstitui o .pycou .pyo, o usuário final também não poderá corrigi-lo.
Segundo: se docstringsfor ignorado com o uso da -OOopção de linha de comando conforme descrito acima, ninguém poderá obter essas informações, o que pode dificultar (ou impossibilitar) o uso do código.
Terceiro: a -OOopção do Python também implementa algumas otimizações conforme a -Oopção da linha de comando; isso pode resultar em alterações na operação. Otimizações conhecidas são:
sys.flags.optimize = 1
assert as instruções são ignoradas
__debug__ = False
Quarto: se você tivesse feito intencionalmente o seu python script executável com algo na ordem de #!/usr/bin/pythonna primeira linha, este é retirado em .pyce .pyoarquivos e que funcionalidade é perdida.
Quinto: um tanto óbvio, mas se você compilar seu código, não apenas o seu uso poderá ser afetado, mas o potencial de outras pessoas aprenderem com seu trabalho é reduzido, muitas vezes severamente.