Erstellen aus dem Quellcode#
Hinweis
Wenn Sie nur SciPy installieren möchten, empfehlen wir die Verwendung von Binärdateien - siehe Installation für Details dazu.
Das Erstellen von SciPy aus dem Quellcode erfordert zunächst die Einrichtung von systemweiten Abhängigkeiten (Compiler, BLAS/LAPACK-Bibliotheken usw.) und dann das Aufrufen eines Builds. Der Build kann durchgeführt werden, um SciPy für lokale Nutzung zu installieren, SciPy selbst zu entwickeln oder verteilbare Binärpakete zu erstellen. Und es kann gewünscht sein, Aspekte des Builds anzupassen. Dieser Leitfaden behandelt all diese Aspekte. Darüber hinaus liefert er Hintergrundinformationen darüber, wie der SciPy-Build funktioniert, und Links zu aktuellen Leitfäden für allgemeine Python-Build- und Verpackungsdokumentationen, die relevant sind.
Systemweite Abhängigkeiten#
SciPy verwendet kompilierten Code für Geschwindigkeit, was bedeutet, dass Sie Compiler und einige andere systemweite (d. h. nicht-Python / nicht-PyPI) Abhängigkeiten benötigen, um es auf Ihrem System zu erstellen.
Hinweis
Wenn Sie Conda verwenden, können Sie die Schritte in diesem Abschnitt überspringen - mit Ausnahme der Installation von Compilern für Windows oder der Apple Developer Tools für macOS. Alle anderen Abhängigkeiten werden automatisch durch den Befehl mamba env create -f environment.yml installiert.
Wenn Sie das System-Python und pip verwenden möchten, benötigen Sie
C, C++ und Fortran-Compiler (typischerweise
gcc,g++undgfortran).Python-Headerdateien (typischerweise ein Paket namens
python3-devoderpython3-devel)BLAS- und LAPACK-Bibliotheken. OpenBLAS ist die SciPy-Standardeinstellung; andere Varianten sind ATLAS und MKL.
pkg-configzur Erkennung von Abhängigkeiten.
Um die Build-Anforderungen von SciPy zu installieren, können Sie tun
sudo apt install -y gcc g++ gfortran libopenblas-dev liblapack-dev pkg-config python3-pip python3-dev
Alternativ können Sie auch tun
sudo apt build-dep scipy
Dieser Befehl installiert alles, was zum Erstellen von SciPy benötigt wird, mit dem Vorteil, dass neue Abhängigkeiten oder Aktualisierungen erforderlicher Versionen von den Paketmanagern gehandhabt werden.
Um die Build-Anforderungen von SciPy zu installieren, können Sie tun
sudo dnf install gcc-gfortran python3-devel openblas-devel lapack-devel pkgconfig
Alternativ können Sie auch tun
sudo dnf builddep scipy
Dieser Befehl installiert alles, was zum Erstellen von SciPy benötigt wird, mit dem Vorteil, dass neue Abhängigkeiten oder Aktualisierungen erforderlicher Versionen von den Paketmanagern gehandhabt werden.
Um die Build-Anforderungen von SciPy zu installieren, können Sie tun
sudo yum install gcc-gfortran python3-devel openblas-devel lapack-devel pkgconfig
Alternativ können Sie auch tun
sudo yum-builddep scipy
Dieser Befehl installiert alles, was zum Erstellen von SciPy benötigt wird, mit dem Vorteil, dass neue Abhängigkeiten oder Aktualisierungen erforderlicher Versionen von den Paketmanagern gehandhabt werden.
Um die Build-Anforderungen von SciPy zu installieren, können Sie tun
sudo pacman -S gcc-fortran openblas pkgconf
Installieren Sie die Apple Developer Tools. Ein einfacher Weg, dies zu tun, ist, ein Terminalfenster zu öffnen und den Befehl einzugeben
xcode-select --install
und folgen Sie den Anweisungen. Die Apple Developer Tools enthalten Git, die C/C++-Compiler von Clang und andere Entwicklungsprogramme, die möglicherweise erforderlich sind.
Verwenden Sie *nicht* das systemeigene Python von macOS. Installieren Sie stattdessen Python mit dem Python.org-Installer oder mit einem Paketmanager wie Homebrew, MacPorts oder Fink.
Die anderen benötigten systemweiten Abhängigkeiten sind ein Fortran-Compiler, BLAS- und LAPACK-Bibliotheken sowie pkg-config. Sie lassen sich am einfachsten mit Homebrew installieren
brew install gfortran openblas pkg-config
Damit die Build-Tools OpenBLAS finden können, müssen Sie ausführen
brew info openblas | grep PKG_CONFIG_PATH
Dies gibt Ihnen einen Befehl, der mit export PKG_CONFIG_PATH= beginnt, den Sie ausführen müssen.
Hinweis
Ab SciPy 1.14.0 haben wir die Unterstützung für die Accelerate-Bibliothek für BLAS und LAPACK hinzugefügt. Sie erfordert macOS 13.3 oder neuer. Um mit Accelerate anstelle von OpenBLAS zu erstellen, siehe Auswahl von BLAS- und LAPACK-Bibliotheken.
Ein kompatibler Satz von C-, C++- und Fortran-Compilern ist erforderlich, um SciPy zu erstellen. Dies ist unter Windows schwieriger als auf anderen Plattformen, da MSVC Fortran nicht unterstützt und gfortran und MSVC nicht zusammen verwendet werden können. Sie benötigen einen der folgenden Compiler-Sätze
Mingw-w64-Compiler (
gcc,g++,gfortran) - *empfohlen, da es am einfachsten zu installieren ist und was wir für die SciPy-eigene CI und Binärdateien verwenden*MSVC + Intel Fortran (
ifort)Intel-Compiler (
icc,ifort)
Im Vergleich zu macOS und Linux ist das Erstellen von SciPy unter Windows etwas schwieriger, da diese Compiler eingerichtet werden müssen. Es ist nicht möglich, einfach einen Einzeiler in der Befehlszeile aufzurufen, wie Sie es auf anderen Plattformen tun würden.
Installieren Sie zuerst Microsoft Visual Studio - die Community Edition von 2019 oder eine neuere Version funktioniert (siehe die Visual Studio Download-Seite). Dies ist auch dann erforderlich, wenn Sie die MinGW-w64- oder Intel-Compiler verwenden, um sicherzustellen, dass Sie die Windows Universal C Runtime haben (die anderen Komponenten von Visual Studio werden nicht benötigt, wenn Sie Mingw-w64 verwenden, und können bei Bedarf deaktiviert werden, um Speicherplatz zu sparen).
Es gibt mehrere Quellen für Binärdateien für MinGW-w64. Wir empfehlen die RTools-Versionen, die mit Chocolatey installiert werden können (siehe Chocolatey-Installationsanweisungen hier)
choco install rtools -y --no-progress --force --version=4.0.0.20220206
Bei Problemen empfehlen wir, genau die gleiche Version wie in den SciPy GitHub Actions CI-Jobs für Windows verwendeten Version zu verwenden.
Der MSVC-Installer legt die Compiler nicht auf dem Systempfad ab, und der Installationsort kann sich ändern. Um den Installationsort abzufragen, verfügt MSVC über ein Befehlszeilentool namens vswhere.exe. Und um die C/C++-Compiler in der verwendeten Shell verfügbar zu machen, müssen Sie eine .bat-Datei für die korrekte Bitness und Architektur ausführen (z. B. für 64-Bit-Intel-CPUs, verwenden Sie vcvars64.bat).
Für detaillierte Anleitungen siehe Verwenden des Microsoft C++-Toolsets über die Befehlszeile.
Ähnlich wie MSVC sind die Intel-Compiler so konzipiert, dass sie mit einem Aktivierungsskript (Intel\oneAPI\setvars.bat) verwendet werden, das Sie in der verwendeten Shell ausführen. Dies macht die Compiler auf dem Pfad verfügbar. Für detaillierte Anleitungen siehe Erste Schritte mit dem Intel® oneAPI HPC Toolkit für Windows.
Hinweis
Compiler sollten auf dem Systempfad liegen (d. h. die Umgebungsvariable PATH sollte das Verzeichnis enthalten, in dem die Compiler-Executables zu finden sind), damit sie gefunden werden, mit Ausnahme von MSVC, das automatisch gefunden wird, wenn und nur wenn keine anderen Compiler auf dem PATH liegen. Sie können jede Shell (z. B. Powershell, cmd oder Git Bash) verwenden, um einen Build aufzurufen. Um zu überprüfen, ob dies der Fall ist, versuchen Sie, einen Fortran-Compiler in der verwendeten Shell aufzurufen (z. B. gfortran --version oder ifort --version).
Warnung
Bei der Verwendung einer Conda-Umgebung ist es möglich, dass die Umgebungsbildung aufgrund eines veralteten Fortran-Compilers fehlschlägt. Wenn dies geschieht, entfernen Sie den compilers-Eintrag aus environment.yml und versuchen Sie es erneut. Der Fortran-Compiler sollte wie in diesem Abschnitt beschrieben installiert werden.
SciPy aus dem Quellcode erstellen#
Wenn Sie SciPy nur einmal aus dem Quellcode installieren und keine Entwicklungsarbeit leisten möchten, dann ist die empfohlene Methode zum Erstellen und Installieren die Verwendung von pip. Andernfalls wird Conda empfohlen.
Hinweis
Wenn Sie noch keine Conda-Installation haben, empfehlen wir die Verwendung von Miniforge; jede Conda-Variante funktioniert jedoch.
SciPy aus dem Quellcode erstellen, um es zu verwenden#
Wenn Sie eine Conda-Umgebung verwenden, ist pip immer noch das Werkzeug, das Sie verwenden, um einen From-Source-Build von SciPy aufzurufen. Es ist wichtig, immer das Flag --no-build-isolation für den Befehl pip install zu verwenden, um zu vermeiden, gegen ein numpy-Wheel von PyPI zu erstellen. Damit dies funktioniert, müssen Sie zuerst die verbleibenden Build-Abhängigkeiten in der Conda-Umgebung installieren
# Either install all SciPy dev dependencies into a fresh conda environment
mamba env create -f environment.yml
# Or, install only the required build dependencies
mamba install python numpy cython pythran pybind11 compilers openblas meson-python pkg-config
# To build the latest stable release:
pip install scipy --no-build-isolation --no-binary scipy
# To build a development version, you need a local clone of the SciPy git repository:
git clone https://github.com/scipy/scipy.git
cd scipy
git submodule update --init
pip install . --no-build-isolation
# To build the latest stable release:
pip install scipy --no-binary scipy
# To build a development version, you need a local clone of the SciPy git repository:
git clone https://github.com/scipy/scipy.git
cd scipy
git submodule update --init
pip install .
SciPy aus dem Quellcode für die SciPy-Entwicklung erstellen#
Wenn Sie aus dem Quellcode erstellen möchten, um an SciPy selbst zu arbeiten, klonen Sie zuerst das SciPy-Repository
git clone https://github.com/scipy/scipy.git
cd scipy
git submodule update --init
Dann möchten Sie Folgendes tun
Erstellen Sie eine dedizierte Entwicklungsumgebung (virtuelle Umgebung oder Conda-Umgebung),
Installieren Sie alle benötigten Abhängigkeiten ( *Build*-, aber auch *Test*-, *Doc*- und *optionale* Abhängigkeiten),
Erstellen Sie SciPy mit unserer Entwicklerschnittstelle
dev.py.
Schritt (3) ist immer derselbe, die Schritte (1) und (2) unterscheiden sich zwischen Conda und virtuellen Umgebungen
Um eine scipy-dev Entwicklungsumgebung mit allen erforderlichen und optionalen Abhängigkeiten zu erstellen, führen Sie aus
mamba env create -f environment.yml
mamba activate scipy-dev
Hinweis
Es gibt viele Werkzeuge zur Verwaltung von virtuellen Umgebungen, wie venv, virtualenv/virtualenvwrapper, pyenv/pyenv-virtualenv, Poetry, PDM, Hatch und mehr. Hier verwenden wir das grundlegende venv-Tool, das Teil der Python-Standardbibliothek ist. Sie können jedes andere Werkzeug verwenden; alles, was wir brauchen, ist eine aktivierte Python-Umgebung.
Erstellen und aktivieren Sie eine virtuelle Umgebung in einem neuen Verzeichnis namens venv (beachten Sie, dass der genaue Aktivierungsbefehl je nach Betriebssystem und Shell unterschiedlich sein kann - siehe „How venvs work“ in der venv-Dokumentation).
python -m venv venv
source venv/bin/activate
python -m venv venv
source venv/bin/activate
python -m venv venv
venv\Scripts\Activate.ps1
Installieren Sie dann die Python-Level-Abhängigkeiten (siehe pyproject.toml) von PyPI mit
# All dependencies
python -m pip install -r requirements/all.txt
# Alternatively, you can install just the dependencies for certain
# development tasks:
# Build and dev dependencies (for `python dev.py {build, lint, mypy}`)
python -m pip install -r requirements/build.txt -r requirements/dev.txt
# Doc dependencies (for `python dev.py {doc, refguide-check}`)
python -m pip install -r requirements/doc.txt
# Test dependencies (for `python dev.py {test, bench, refguide-check}`)
python -m pip install -r requirements/test.txt
Um SciPy in einer aktivierten Entwicklungsumgebung zu erstellen, führen Sie aus
python dev.py build
Dadurch wird SciPy innerhalb des Repositories installiert (standardmäßig in einem Verzeichnis build-install). Sie können dann Tests ausführen (python dev.py test), in IPython wechseln (python dev.py ipython) oder andere Entwicklungsschritte unternehmen, wie z. B. die HTML-Dokumentation erstellen oder Benchmarks ausführen. Die dev.py-Oberfläche ist selbsterklärend, lesen Sie daher bitte python dev.py --help und python dev.py <subcommand> --help für detaillierte Anleitungen.
IDE-Unterstützung & editierbare Installationen
Während die dev.py-Schnittstelle unser empfohlener Weg ist, an SciPy zu arbeiten, hat sie eine Einschränkung: Aufgrund des benutzerdefinierten Installationsortes wird SciPy, das mit dev.py installiert wurde, von einer IDE nicht automatisch erkannt (z. B. zum Ausführen eines Skripts über eine „Run“-Schaltfläche oder zum visuellen Setzen von Haltepunkten). Dies funktioniert besser mit einem *In-Place-Build* (oder „editierbare Installation“).
Editierbare Installationen werden unterstützt. Es ist wichtig zu verstehen, dass Sie entweder eine editierbare Installation oder dev.py in einem gegebenen Repository-Klon verwenden können, aber nicht beides. Wenn Sie editierbare Installationen verwenden, müssen Sie pytest und andere Entwicklungswerkzeuge direkt anstelle von dev.py verwenden.
Um eine editierbare Installation zu verwenden, stellen Sie sicher, dass Sie von einem sauberen Repository ausgehen (führen Sie git clean -xdf aus, wenn Sie zuvor mit dev.py erstellt haben) und alle Abhängigkeiten korrekt eingerichtet sind, wie weiter oben auf dieser Seite beschrieben. Führen Sie dann
# Note: the --no-build-isolation is important! meson-python will
# auto-rebuild each time SciPy is imported by the Python interpreter.
pip install -e . --no-build-isolation
# To run the tests for, e.g., the `scipy.linalg` module:
pytest scipy/linalg
Wenn Sie Änderungen am SciPy-Code vornehmen, auch am kompilierten Code, müssen Sie nicht manuell neu erstellen oder neu installieren. Wenn Sie git clean -xdf ausführen, das die erstellten Erweiterungsmodule entfernt, denken Sie daran, SciPy auch mit pip uninstall scipy zu deinstallieren.
Weitere Details dazu, wie die Dinge unter der Haube funktionieren, finden Sie in der Dokumentation zu Meson-Python über editierbare Installationen.
Statische Typ-Stubs installieren#
Wenn Sie statische Typ-Stubs installieren möchten, um Ihre Entwicklung von SciPy zu unterstützen, können Sie das Paket scipy-stubs in Ihre Entwicklungsumgebung aufnehmen. Es ist auf PyPI und conda-forge verfügbar - siehe die Installationsanleitung von scipy-stubs.