Library / SDK
scipy/scipy avatar
scipy/scipy

SciPy 1.18: What the Release Cycle Tells You About Adopting the Core Scientific Python Stack

SciPy library main repository. NumPy and SciPy are easy to use, but powerful enough to be depended upon by some of the world's leading scientists and engineers.

15,014 stars5,931 forksPythonBSD-3-Clause

At a glance

What is it?
SciPy is the standard Python library for scientific computing. This review covers what it does, how it is structured, how to install it, and what to check before you depend on it in production.
Who is it for?
Adopt SciPy if your work involves numerical integration, optimization, signal processing, or statistics on NumPy arrays, and you value a mature, BSD-licensed library with a large contributor base. Do not adopt it if you need GPU acceleration, automatic differentiation, or a purely functional API; those are better served by JAX or PyTorch.
Can I use it commercially?
Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 14, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The Problem SciPy Solves: A Shared Language for Numerical Work

The documentation emphasizes that SciPy is free of charge and runs on all popular operating systems. That matters for adoption because it removes licensing friction. The BSD-3-Clause license is permissive, which means you can embed SciPy in commercial products without paying fees or releasing your own code. The README also mentions a DOI for citation, which is a sign that the project is used in academic work. If you publish results, you can cite the library formally. That is a concrete advantage over a homegrown implementation that has no citation mechanism.

How SciPy Is Organized: A Collection of Submodules, Not a Monolith

SciPy is not a single algorithm; it is a collection of submodules, each with a specific focus. The README lists statistics, optimization, integration, linear algebra, Fourier transforms, signal and image processing, and ODE solvers. In practice, you import a submodule like scipy.optimize or scipy.signal, not the whole library. That structure matters for performance and memory. When you import scipy.optimize, Python loads only that module and its dependencies, not every algorithm in the library. This is a design choice that keeps startup time reasonable. The documentation for each submodule is separate, which helps you learn only what you need. However, this modularity also means you must understand which submodule contains the routine you want. The names are mostly intuitive, but there is overlap: for example, scipy.linalg and scipy.sparse.linalg both provide linear algebra routines, but for different data types. You need to read the docs to pick the right one.

Getting It Running: Real Installation Commands and Version Checks

The README points to the install guide at scipy.org/install, but the repository itself does not list commands. Based on the standard Python packaging ecosystem, the usual way is pip install scipy or conda install scipy from conda-forge. The README includes badges for PyPI and conda-forge downloads, confirming both distribution channels are official. The latest release is v1.18.1, pushed on 2026-08-21. If you need a specific version, you can pin it in your environment. The repository has a main branch and a development documentation site at scipy.github.io/devdocs. That is useful if you want to test upcoming features. There is also a security vulnerability reporting process via Tidelift, which is documented in the security tutorial. Before installing, check that your Python and NumPy versions are compatible with SciPy 1.18.1. The release notes for each version typically state the minimum NumPy version, but the README does not list it, so you must check the release notes or the install guide.

A Real Limitation: The Library Is CPU-Centric and Array-Oriented

SciPy is built on NumPy arrays and runs on the CPU. The README does not mention GPU support, and there is no indication of distributed computing. If your problem requires massive parallelism or GPU acceleration, SciPy is the wrong tool. You would need to wrap it with something like CuPy or use a different library entirely. Another limitation is that SciPy is not designed for automatic differentiation. The optimization routines take objective functions, but they do not compute gradients for you. You must provide derivatives or use finite differences, which can be slow and inaccurate. That is a real constraint for machine learning or inverse problems where gradients are essential. The README does not claim otherwise, but it is worth stating because many engineers assume that a scientific library includes differentiation. It does not.

The Alternative: JAX and PyTorch Take a Different Approach

If you need GPU acceleration or automatic differentiation, JAX is a direct alternative. JAX also uses NumPy-like arrays, but it adds just-in-time compilation and automatic differentiation. The key difference is that JAX transforms functions, not just data. You write a function and then use jax.grad to get its gradient. SciPy requires you to implement gradients or use numerical approximations. PyTorch is another alternative, especially for deep learning, but it is heavier and has a different data model. For pure scientific computing on CPUs, SciPy remains the standard. The choice depends on whether you need derivatives and hardware acceleration. If you do, JAX or PyTorch is better. If you only need integration, optimization, and signal processing on modest data, SciPy is simpler and more stable.

Maintenance and Upgrade Cost: What the Repository Shows

The repository is actively maintained. The last push was on 2026-08-21, the same day as the v1.18.1 release. There are three releases in the recent list: 1.18.0, 1.18.0rc2, and 1.18.1. That suggests a regular release cadence, with a release candidate followed by a final patch. The README includes a Linux Foundation health score badge, which is a signal of project health, though the score itself is not shown. The project has a contributor guide and an AI policy, which indicates a structured onboarding process. For upgrade cost, you should expect API changes between major versions. The development documentation is available, so you can preview changes. The main branch is the development version, so if you track it, you must adapt to changes. For production, pin a release version and test before upgrading. The license is BSD-3-Clause, which is permissive, but you should still review the license text if you plan to redistribute or modify the library.

When SciPy Is the Wrong Tool: Cases Where You Should Look Elsewhere

SciPy is not a one-size-fits-all solution. If you need symbolic mathematics, use SymPy. If you need high-performance sparse linear algebra on GPUs, look at cuSOLVER or a library that wraps it. If you need to solve a specific industrial problem like computational fluid dynamics, you likely need a dedicated solver, not SciPy. The README does not mention these alternatives, but the module list makes it clear that SciPy covers general-purpose algorithms, not specialized domains. Another case is when you need real-time performance. SciPy is written in a mix of Python and compiled code, but the Python overhead can be too high for tight loops. You can optimize with NumPy vectorization, but there are limits. For real-time signal processing on embedded devices, you might use C or a library like Eigen. SciPy is a tool for analysis and prototyping, not necessarily for production embedded systems.

Editorial conclusion

Adopt SciPy if your work involves numerical integration, optimization, signal processing, or statistics on NumPy arrays, and you value a mature, BSD-licensed library with a large contributor base. Do not adopt it if you need GPU acceleration, automatic differentiation, or a purely functional API; those are better served by JAX or PyTorch. Before committing, verify that the specific submodule you need (e.g., scipy.optimize, scipy.signal) is maintained and that the latest release (1.18.1) works with your Python and NumPy versions. Check the release notes for any API changes, and test your workflows against the development documentation if you plan to track the main branch. SciPy is not a single tool but a collection of algorithms; its value depends on how well each module matches your problem domain.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community notes

Community notes