Instalando pacotes científicos¶
O software científico tende a ter dependências mais complexas do que a maioria e, frequentemente, terá várias opções de construção para tirar proveito de diferentes tipos de hardware ou para interoperar com diferentes partes de software externo.
In particular, NumPy, which provides the basis for most of the software in the scientific Python stack can be configured to interoperate with different FORTRAN libraries, and can take advantage of different levels of vectorized instructions available in modern CPUs.
Starting with version 1.10.4 of NumPy and version 1.0.0 of SciPy, pre-built
32-bit and 64-bit binaries in the wheel
format are available for all major
operating systems (Windows, macOS, and Linux) on PyPI. Note, however, that on
Windows, NumPy binaries are linked against the ATLAS BLAS/LAPACK library, restricted to SSE2
instructions, so they may not provide optimal linear algebra performance.
Existem várias opções alternativas para obter bibliotecas científicas Python (ou quaisquer outras bibliotecas Python que requerem um ambiente de compilação para instalar a partir do código-fonte e não fornecem arquivos de wheel pré-construídos no PyPI).
Construindo a partir do código-fonte¶
A mesma complexidade que torna difícil distribuir o NumPy (e muitos dos projetos que dependem dele) como arquivos wheel também torna difícil construí-los a partir do código-fonte. No entanto, para pessoas intrépidas que estão dispostas a gastar o tempo discutindo compiladores e vinculadores para C e FORTRAN, construir a partir do código-fonte é sempre uma opção.
Pacotes de distribuição Linux¶
Para usuários Linux, o gerenciador de pacotes do sistema frequentemente terá versões pré-compiladas de várias peças de software científico, incluindo NumPy e outras partes da pilha científica Python.
Se usar versões que podem ter vários meses é aceitável, então esta é provavelmente uma boa opção (apenas certifique-se de permitir o acesso às distribuições instaladas no sistema Python ao usar ambientes virtuais).
Instaladores para Windows¶
Muitos projetos Python que não publicam (ou não podem) atualmente publicar arquivos wheel, pelo menos publicam instaladores Windows, seja no PyPI ou na página de download de seus projetos. O uso desses instaladores permite que os usuários evitem a necessidade de configurar um ambiente adequado para construir extensões localmente.
As extensões fornecidas nesses instaladores são normalmente compatíveis com os instaladores do CPython para o Windows publicados em python.org.
Tal como acontece com os pacotes de sistema Linux, os instaladores Windows irão apenas instalar em uma instalação de sistema Python – eles não oferecem suporte à instalação em ambientes virtuais. Permitir o acesso a distribuições instaladas no sistema Python ao usar ambientes virtuais é uma abordagem comum para contornar essa limitação.
O projeto Wheel também fornece um subcomando wheel convert que pode converter um instalador para Windows bdist_wininst em um wheel.
Instaladores e gerenciadores de pacote para macOS¶
Semelhante à situação no Windows, muitos projetos (incluindo NumPy) publicam instaladores para macOS que são compatíveis com os binários do CPython para macOS publicados em python.org.
Os usuários do macOS também têm acesso aos gerenciadores de pacotes de estilo de distribuição Linux, como Homebrew
. O site SciPy tem mais detalhes sobre como usar Homebrew para instalar SciPy no macOS.
Distribuições SciPy¶
The SciPy site lists several distributions that provide the full SciPy stack to end users in an easy to use and update format.
Algumas dessas distribuições podem não ser compatíveis com o conjunto de ferramentas padrão pip
e virtualenv
.
Spack¶
Spack é um gerenciador de pacotes flexível projetado para oferecer suporte a múltiplas versões, configurações, plataformas e compiladores. Ele foi construído para dar suporte às necessidades de grandes centros de supercomputação e equipes de aplicações científicas, que frequentemente precisam criar software de muitas maneiras diferentes. O Spack não está limitado a Python; ele pode instalar pacotes para C
, C++
, Fortran
, R
e outras linguagens. É não destrutivo; instalar uma nova versão de um pacote não interrompe as instalações existentes, portanto, muitas configurações podem coexistir no mesmo sistema.
O Spack oferece uma sintaxe simples, mas poderosa, que permite aos usuários especificar versões e opções de configuração de forma concisa. Os arquivos de pacote são escritos em puro Python e são modelados para que seja fácil trocar compiladores, implementações de dependência (como MPI), versões e opções de construção com um único arquivo de pacote. O Spack também gera arquivos de módulo para que os pacotes possam ser carregados e descarregados do ambiente do usuário.
O gerenciador de pacotes multiplataforma conda¶
conda
is an open source (BSD licensed) package management system and
environment management system that allows users to install
multiple versions of binary software packages and their dependencies, and
easily switch between them. It is a cross-platform tool working on Windows,
MacOS, and Linux. Conda can be used to package up and distribute all kinds of
packages, it is not limited to just Python packages. It has full support for
native virtual environments. Conda makes environments first-class citizens,
making it easy to create independent environments even for C libraries. It is
written in Python, but is Python-agnostic. Conda manages Python itself as a
package, so that conda update python is possible, in contrast to
pip, which only manages Python packages.
Anaconda Anaconda is a Python distribution published by Anaconda, Inc. It is a stable collection of Open Source packages for big data and scientific use, and a collection of Graphical Interface utilities for managing conda environments.
In addition to the full distribution provided by Anaconda, the conda package manager itself is available in miniconda, miniforge, and pixi.
Conda packages are available on multiple channels on Anaconda.org, including the default channel supported by Anaconda, Inc, the community supported conda-forge channel, which provides a wide variety of pre-built packages, and some domain-specific package collections.