O que as extensões de arquivo python, .pyc .pyd .pyo representam?

435

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?

Yanki Twizzy
fonte

Respostas:

481
  1. .py: Normalmente é o código fonte de entrada que você escreveu.
  2. .pyc: Este é o código de código compilado. Se você importar um módulo, o python criará um *.pycarquivo que contém o bytecode para facilitar a importação mais tarde (e mais rápido).
  3. .pyo: Este era um formato de arquivo usado antes do Python 3.5 para *.pycarquivos criados com o -Osinalizador optimizations ( ). (veja a nota abaixo)
  4. .pyd: Este é basicamente um arquivo DLL do Windows. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

Também para uma discussão mais aprofundada sobre .pycvs .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 .pyoarquivos. Isso significa que os .pycarquivos representam bytecode não otimizado e otimizado.

Bill Lynch
fonte
2
Os arquivos DLL são gerados a partir de scripts python ou scripts c / c ++?
Yanki Twizzy
1
@yankitwizzy: Sim. Eles devem ser gerados a partir do código C / C ++. O arquivo deve estar no código da máquina, portanto, não pode ser diretamente do python.
Bill Lynch
"O otimizador atualmente não ajuda muito; ele apenas remove declarações de afirmação.". Você tem certeza disso? Tentedef 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));
Jorge Leitão
@ JCLeitão: Tenho certeza do que? Você poderia explicar o que acha que o seu exemplo mostra em vez de apenas lançar código em um comentário.
Bill Lynch
9
Observe que no Python 3.5 , o PEP 488 é implementado, o que acaba com o conceito de .pyoarquivos. Até o bytecode otimizado termina com a .pycextensão Python 3.5, então.
Michael Currie
228
  • .py - script regular
  • .py3 - (raramente usado) script Python3. Os scripts Python3 geralmente terminam com ".py" e não ".py3", mas já vi isso algumas vezes
  • .pyc - script compilado (Bytecode)
  • .pyo - arquivo pyc otimizado (A partir de Python3.5, Python vai usar apenas pyc em vez de pyo e pyc)
  • .pyw - script Python para executar no modo de janela, sem um console; executado com pythonw.exe
  • .pyx - Cython src a ser convertido para C / C ++
  • .pyd - Script Python criado como uma DLL do Windows
  • .pxd - script Cython que é equivalente a um cabeçalho C / C ++
  • .pxi - esboço MyPy
  • .pyi - arquivo Stub ( PEP 484 )
  • .pyz - arquivo de scripts Python ( PEP 441 ); este é um script que contém scripts Python compactados (ZIP) em formato binário após o cabeçalho padrão do script Python
  • .pywz - arquivo de scripts Python para MS-Windows ( PEP 441 ); este é um script que contém scripts Python compactados (ZIP) em formato binário após o cabeçalho padrão do script Python
  • .py [cod] - notação curinga em ".gitignore" que significa que o arquivo pode ser ".pyc", ".pyo" ou ".pyd".
  • .pth - um arquivo de configuração de caminho; seu conteúdo são itens adicionais (um por linha) a serem adicionados sys.path. Veja o sitemó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/

Devyn Collier Johnson
fonte
11
Deve-se notar que um arquivo «.pyx» não é bastante fonte Python que é convertido em C, mas sim código fonte Cython (ou seja: à espera de ser convertido em C)
Fred Osterrath
O que "I" representa na extensão PYI? "Incluir" / "Implementação" / "Interface"?
precisa saber é o seguinte
1
.pyw significa script PYthon que cria uma janela, não o Python 4 Windows. .pyw pode ser executado sob * nix
Kotauskas
1
Em geral, .pyw é um script para ser executado no modo de janela, ou seja, sem uma saída do console. Como o @VladislavToncharov afirma, eles podem ser executados na maioria das plataformas que suportam python, se estiver instalado .
9788 Steve Barnes #
1
Esta resposta deve discutir .ptharquivos.
Wim