Vale a pena notar que idiomas não são interpretados ou compilados, mas sim implementações de linguagem interpretam ou compilam código. Você observou que o Ruby é uma "linguagem interpretada", mas você pode compilar o Ruby à la MacRuby , então não é sempre uma linguagem interpretada.
Praticamente todas as implementações do Python consistem em um interpretador (ao invés de um compilador). Os arquivos .pyc
que você vê são códigos de bytes para a máquina virtual Python (semelhante aos arquivos .class
do Java). Eles não são o mesmo que o código de máquina gerado por um compilador C para uma arquitetura de máquina nativa. Algumas implementações do Python, no entanto, consistem em um compilador just-in-time que compilará o código de byte do Python no código de máquina nativo.
(Eu digo "praticamente tudo" porque eu não sei de nenhum compilador nativo de máquina para Python, mas eu não quero afirmar que nenhum existe em lugar nenhum).