O que significam essas extensões de arquivo python?
- .pyc
- .pyd
- .pyo
Quais são as diferenças entre eles e como eles são gerados a partir de um arquivo * .py?
O que significam essas extensões de arquivo python?
Quais são as diferenças entre eles e como eles são gerados a partir de um arquivo * .py?
Respostas:
.py
: Normalmente é o código fonte de entrada que você escreveu..pyc
: Este é o código de código compilado. Se você importar um módulo, o python criará um *.pyc
arquivo que contém o bytecode para facilitar a importação mais tarde (e mais rápido)..pyo
: Este era um formato de arquivo usado antes do Python 3.5 para *.pyc
arquivos criados com o -O
sinalizador optimizations ( ). (veja a nota abaixo).pyd
: Este é basicamente um arquivo DLL do Windows. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dllTambém para uma discussão mais aprofundada sobre .pyc
vs .pyo
, consulte: http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html (copiei a parte importante abaixo)
- Quando o interpretador Python é chamado com o sinalizador -O, o código otimizado é gerado e armazenado nos arquivos '.pyo'. O otimizador atualmente não ajuda muito; apenas remove instruções de afirmação. Quando -O é usado, todo o bytecode é otimizado; Os arquivos .pyc são ignorados e os arquivos .py são compilados no bytecode otimizado.
- Passar dois sinalizadores -O para o interpretador Python (-OO) fará com que o compilador de bytecodes execute otimizações que, em alguns casos raros, resultam em programas com defeito. Atualmente, apenas as
__doc__
strings são removidas do bytecode, resultando em arquivos '.pyo' mais compactos. Como alguns programas podem contar com a disponibilidade deles, você só deve usar esta opção se souber o que está fazendo.- Um programa não roda mais rápido quando é lido de um arquivo '.pyc' ou '.pyo' do que quando é lido de um arquivo '.py'; a única coisa mais rápida nos arquivos '.pyc' ou '.pyo' é a velocidade com que eles são carregados.
- Quando um script é executado, fornecendo seu nome na linha de comando, o bytecode do script nunca é gravado em um arquivo '.pyc' ou '.pyo'. Portanto, o tempo de inicialização de um script pode ser reduzido movendo a maior parte de seu código para um módulo e tendo um pequeno script de autoinicialização que importa esse módulo. Também é possível nomear um arquivo '.pyc' ou '.pyo' diretamente na linha de comando.
Nota:
Em 15/09/2015, a versão do Python 3.5 implementou o PEP-488 e eliminou os .pyo
arquivos. Isso significa que os .pyc
arquivos representam bytecode não otimizado e otimizado.
def f(x): assert(x**5 == x*x*x*x*x); return x; import timeit; print(timeit.repeat("for x in range(100): f(x)", "from __main__ import f", number=10000));
.pyo
arquivos. Até o bytecode otimizado termina com a .pyc
extensão Python 3.5, então.
sys.path
. Veja o site
módulo.Uma lista maior de extensões de arquivo Python adicionais (principalmente raras e não oficiais) pode ser encontrada em http://dcjtech.info/topic/python-file-extensions/
.pth
arquivos.