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 .pyc
ou .pyo
em comparação com o .py
arquivo de origem .
Quinto: é muito menos provável que um usuário final com apenas um arquivo .pyc
ou .pyo
na 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 .pyc
arquivo da seguinte maneira:
python -m py_compile myscript.py
Isso remove os comentários. Deixa docstrings
intacto. 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 .pyo
arquivo em vez de um .pyc
arquivo; 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 docstrings
em primeiro lugar). Mas veja a desvantagem três, abaixo.
Note-se que python usa a .py
data do arquivo, se ele estiver presente, para decidir se ele deve executar o .py
arquivo em oposição ao .pyc
ou .pyo
arquivo --- então editar o arquivo .py, ea .pyc
ou .pyo
é obsoleto e tudo o que os benefícios que você ganhou são perdidas. Você precisa recompilar-lo, a fim de obter o .pyc
ou .pyo
benefícios de volta novamente, como eles podem ser.
Desvantagens:
Primeiro: há um "cookie mágico" .pyc
e os .pyo
arquivos 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 .pyc
ou .pyo
sem o associado .py
para recompilar ou touch
substitui o .pyc
ou .pyo
, o usuário final também não poderá corrigi-lo.
Segundo: se docstrings
for ignorado com o uso da -OO
opçã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 -OO
opção do Python também implementa algumas otimizações conforme a -O
opçã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/python
na primeira linha, este é retirado em .pyc
e .pyo
arquivos 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.