Por que o build do SciPy para a versão Python 3.12 parece um milagre
- A versão Python 3.12 foi lançada recentemente.
- É comum que os principais pacotes lancem rapidamente versões compatíveis com uma nova versão do Python.
- O fato de o SciPy ter lançado um build compatível com Python 3.12 foi um resultado afortunado do cruzamento de vários cronogramas.
O papel do Fortran e dos compiladores
- Fortran é uma linguagem de programação importante desde os anos 1950, e muito código científico foi escrito em Fortran.
- Existiam vários compiladores Fortran, mas todos eram proprietários.
- Compiladores têm a função de transformar o código escrito pelos programadores em uma forma que o computador possa executar.
- GCC é um compilador de uso livre que oferece suporte a várias arquiteturas de CPU e sistemas operacionais.
Python e o problema de desempenho
- Python pode ser usado sem compilador, mas é mais lento do que linguagens compiladas.
- Quando o desempenho é importante, uma boa solução é usar código compilado encapsulado por uma interface em Python.
- NumPy e SciPy usam código Fortran por desempenho, e por isso os usuários precisam de um compilador ao instalar os pacotes.
Os problemas de empacotamento no Python
- O empacotamento no Python precisou ser reinventado continuamente por causa de sua complexidade.
- Baixar o código-fonte diretamente traz problemas como a necessidade de configurar compiladores e tempos longos de build para o usuário.
- O formato "wheel" melhorou isso ao distribuir os pacotes com as bibliotecas necessárias incluídas.
O surgimento do conda e do conda-forge
- O conda oferece uma abordagem mais abrangente, incluindo tudo o que é necessário para o empacotamento.
- O conda-forge é um canal mantido pela comunidade que realiza o trabalho de integração de pacotes.
- O conda-forge busca oferecer suporte a todas as plataformas comuns e é operado por voluntários.
A escolha do Meson como ferramenta de build do SciPy
- O SciPy escolheu o Meson como ferramenta de build.
- O Meson oferece uma interface no estilo Python e é menos complexo que o CMake.
- O Meson adota uma filosofia de projeto que evita permitir operações incorretas para usuários que não são especialistas.
O renascimento do Fortran e o LLVM
- O interesse em Fortran aumentou nos últimos anos.
- O desenvolvimento de novos compiladores Fortran baseados em LLVM ganhou força.
- O LLVM fornece uma infraestrutura de compiladores que funciona em várias arquiteturas e plataformas.
A migração do SciPy para Meson e os problemas do conda-forge
- O SciPy migrou para o Meson, mas surgiram problemas devido à ausência de um compilador Fortran para Windows.
- O conda-forge precisou recompilar todos os pacotes relacionados para a migração para Python 3.12.
O significado de 'yukatastrophe' e a opinião do GN⁺
- Como a suíte de testes do SciPy passou 100%, tornou-se possível fazer no conda-forge um build do SciPy compatível com Python 3.12.
- Isso foi o resultado da combinação de vários esforços e coincidências felizes, trazendo um grande benefício para a comunidade Python.
- Opinião do GN⁺: este artigo mostra como o esforço e a colaboração da comunidade Python podem resolver problemas técnicos complexos. O lançamento bem-sucedido de um build do SciPy compatível com Python 3.12 é um avanço importante na área de computação científica e simboliza a força do software de código aberto e do poder da comunidade.
3 comentários
Comentários no Hacker News
A comunidade de software livre deveria parar de oferecer suporte ao sistema operacional da Microsoft e deixar que eles mesmos façam o port de coisas como o scipy
O empacotamento de Python é complicado por causa da falta de padronização das ferramentas de build de C/C++/Fortran e do enorme ecossistema, e não por causa do próprio Python
Parece ser um bug a ferramenta de build Meson rejeitar a combinação MSVC+gfortran
Muitas pessoas estão resolvendo o problema usando WSL2, e fica a dúvida de por que tentar compilar uma versão nativa para Windows
A maioria das melhores bibliotecas BLAS foi escrita em C, e fica a curiosidade sobre até que ponto seria possível obter resultados apenas com C e Python
Pergunta ingênua sobre se, como a semântica de Fortran é tão diferente da de C, não seria possível converter para C e depois compilar com um compilador de C, e se seria viável manter isso em C
É difícil acompanhar as mudanças no sistema de build do Python
Pergunta sobre se
aarch64earm64são a mesma coisaFortran era alvo de piadas no departamento de TI, mas nos últimos anos passou por um renascimento dramático
Pergunta sobre a diferença entre
arm64eaarch64na tabela de compilador/arquiteturaIsso expõe de forma bem crua a nossa maldita dependência de linguagens compiladas para binário.
Não resolveram no Python, mas não foi resolvido em outros ecossistemas, certo? Por isso devem fornecer binários pré-compilados.