diff --git a/CHANGELOG.md b/CHANGELOG.md index 530aafa..b117baa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,16 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +### Added + +- **conda-forge availability.** pyBmodes is now packaged on + conda-forge, so `conda install -c conda-forge pybmodes` works + alongside `pip install pybmodes`. The feedstock builds the noarch + package from each PyPI sdist, so the conda channel tracks PyPI + releases. The README and installation guide cover the conda path + and how to add the optional dependencies (`matplotlib`, `pyyaml`) + that the pip extras would otherwise pull in. + ## [1.15.1] — 2026-05-30 A focused ergonomic patch addressing the only piece of feedback on diff --git a/README.md b/README.md index 2c89f6d..12c604f 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ [![CI](https://github.com/SMI-Lab-Inha/pyBModes/actions/workflows/ci.yml/badge.svg)](https://github.com/SMI-Lab-Inha/pyBModes/actions/workflows/ci.yml) [![Validation](https://github.com/SMI-Lab-Inha/pyBModes/actions/workflows/validation.yml/badge.svg)](https://github.com/SMI-Lab-Inha/pyBModes/actions/workflows/validation.yml) [![Docs](https://readthedocs.org/projects/pybmodes/badge/?version=latest)](https://pybmodes.readthedocs.io/en/latest/) +[![conda-forge](https://img.shields.io/conda/vn/conda-forge/pybmodes.svg)](https://anaconda.org/conda-forge/pybmodes) [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/) [![License: Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-green.svg)](LICENSE) @@ -16,7 +17,7 @@ Full documentation is published on [Read the Docs](https://pybmodes.readthedocs. | Page | What's there | | --- | --- | -| [Installation](https://pybmodes.readthedocs.io/en/latest/installation.html) | PyPI / source install, extras matrix, Windows + conda quickstart, troubleshooting | +| [Installation](https://pybmodes.readthedocs.io/en/latest/installation.html) | PyPI / conda-forge / source install, extras matrix, Windows + conda quickstart, troubleshooting | | [Quickstart](https://pybmodes.readthedocs.io/en/latest/quickstart.html) | Nine worked recipes — synthetic tower, OpenFAST deck, monopile + SubDyn, floating coupled, Campbell sweep, WindIO one-click, MAC, batch, persistence | | [Theory](https://pybmodes.readthedocs.io/en/latest/theory.html) | Eigenproblem maths, 15-DOF beam element, four boundary conditions, polynomial ansatz, solver dispatch, citable references | | [Data sources](https://pybmodes.readthedocs.io/en/latest/data_sources.html) | Every input format — BModes `.bmi`, ElastoDyn / SubDyn / HydroDyn / MoorDyn `.dat`, WAMIT `.1` / `.hst`, WindIO `.yaml` — with snippet examples | @@ -43,10 +44,18 @@ python -m http.server -d docs/_build/html ## Install +From PyPI: + ```bash pip install pybmodes ``` +Or from conda-forge: + +```bash +conda install -c conda-forge pybmodes +``` + That installs the runtime core (`numpy` + `scipy`). Add an extra for optional features — `[plots]`, `[windio]`, `[notebook]`, `[docs]` (matrix below). For a source / editable checkout (contributors, or tracking `master`): ```bash @@ -77,9 +86,22 @@ git pull pip install -e ".[dev,plots]" # picks up new dependencies too ``` -**Using a conda environment?** pyBmodes is installed with `pip` *inside* the -conda env (it's not on conda-forge), so activate the env first, then upgrade -with pip — don't use `conda update`: +**Using a conda environment?** pyBmodes is on conda-forge, so you can install +and upgrade it with conda directly: + +```bash +conda install -c conda-forge pybmodes # install +conda update -c conda-forge pybmodes # upgrade +``` + +The conda-forge package carries the runtime core (`numpy` + `scipy`). For the +optional features, add the matching conda-forge packages alongside it +(`matplotlib` for `pybmodes.plots`, `pyyaml` for the WindIO path), since the +pip-style `[plots]` / `[windio]` extras are a pip concept. + +If you'd rather pip-install into a conda env instead, activate the env first +and upgrade with `pip install --upgrade pybmodes` (not `conda update`) so conda +and pip don't both try to manage the package: ```bash conda activate pybmodes # the env you installed it into diff --git a/docs/installation.rst b/docs/installation.rst index 8e8de6c..b59ccb1 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -32,6 +32,27 @@ To pin a specific release in a requirements file or a pybmodes ~=1.9 # latest 1.9.x, blocks 2.x pybmodes >=1.9,<2 # 1.9+ but never a major bump +From conda-forge +---------------- + +``pybmodes`` is also packaged on `conda-forge +`_: + +.. code-block:: bash + + conda install -c conda-forge pybmodes + +This pulls the runtime core (``numpy``, ``scipy``) and the +``pybmodes`` CLI, exactly like the PyPI wheel. The pip-style +extras (``[plots]``, ``[windio]``, ...) are a pip concept and have +no conda equivalent, so for the optional features add the matching +conda-forge packages alongside it, ``matplotlib`` for +``pybmodes.plots`` and ``pyyaml`` for the WindIO path. + +.. code-block:: bash + + conda install -c conda-forge pybmodes matplotlib pyyaml + From source (editable) ---------------------- @@ -155,9 +176,26 @@ picked up too. Inside a conda environment ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -pyBmodes is not on conda-forge, so it is installed with ``pip`` inside -the conda env. Upgrading is therefore a ``pip`` operation rather than a -``conda update``. Activate the env first, then upgrade with pip. +pyBmodes is on conda-forge, so inside a conda env you can install and +upgrade it with conda directly. + +.. code-block:: bash + + conda install -c conda-forge pybmodes # install + conda update -c conda-forge pybmodes # upgrade + python -c "import pybmodes; print(pybmodes.__version__)" + +.. note:: + + The conda-forge package ships the runtime core only. For the + optional features add the matching conda-forge packages + (``matplotlib`` for ``pybmodes.plots``, ``pyyaml`` for the WindIO + path), since the pip-style extras have no conda equivalent. + +If you installed pyBmodes with ``pip`` inside a conda env instead of +from conda-forge, keep upgrading it with ``pip``, not ``conda update``, +so the two package managers don't both try to manage it. Activate the +env first, then upgrade with pip. .. code-block:: bash @@ -167,12 +205,13 @@ the conda env. Upgrading is therefore a ``pip`` operation rather than a .. note:: - ``conda update pybmodes`` will not work, because conda doesn't know - the package (pip installed it). If you're unsure which env has it, - ``conda env list`` shows every env and ``pip show pybmodes`` confirms - the version installed in the currently active one. For a source - checkout living in a conda env, ``git pull`` then re-run the editable - ``pip install -e ".[dev,plots]"`` with the env active. + A ``pip``-installed pyBmodes won't respond to ``conda update + pybmodes``, because conda doesn't track a pip-installed package. If + you're unsure which env has it, ``conda env list`` shows every env and + ``pip show pybmodes`` confirms the version installed in the currently + active one. For a source checkout living in a conda env, ``git pull`` + then re-run the editable ``pip install -e ".[dev,plots]"`` with the env + active. Verifying the install ---------------------