From 99e500eaf4d544ba529a859aae39ba81eefd4f43 Mon Sep 17 00:00:00 2001 From: Jae Hoon Seo Date: Mon, 8 Jun 2026 23:04:58 +0900 Subject: [PATCH] docs: document conda-forge availability pyBmodes is now packaged on conda-forge. Update the README and the installation guide to show the conda install and upgrade path alongside pip, explain how to add the optional dependencies the pip extras would otherwise pull in (matplotlib, pyyaml), and add a conda-forge version badge. Record the availability under the Unreleased changelog heading. --- CHANGELOG.md | 10 ++++++++ README.md | 30 ++++++++++++++++++++--- docs/installation.rst | 57 ++++++++++++++++++++++++++++++++++++------- 3 files changed, 84 insertions(+), 13 deletions(-) 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 ---------------------