diff --git a/.github/workflows/actionlint.yml b/.github/workflows/actionlint.yml new file mode 100644 index 000000000..26d3c1ae8 --- /dev/null +++ b/.github/workflows/actionlint.yml @@ -0,0 +1,18 @@ +name: Actionlint + +on: + pull_request: + paths: + - '.github/**' + +jobs: + actionlint: + name: Action lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check workflow files + run: | + bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash) + ./actionlint -color -ignore SC2129 + shell: bash diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index 0a24fecd6..881bb1c69 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -106,15 +106,22 @@ jobs: - name: get directory name # if this is a tag, use the tag name as the directory name else dev + env: + REF: ${{ github.ref }} run: | - if [[ "${{ github.ref }}" == "refs/tags/"* ]]; then - echo "branch_name=${{ github.ref_name }}" >> $GITHUB_ENV + TAG="${GITHUB_REF/refs\/tags\/v/}" + VER="${TAG/a*/}" # remove alpha identifier + VER="${VER/b*/}" # remove beta identifier + VER="${VER/rc*/}" # remove rc identifier + + if [[ "$REF" == "refs/tags/v"* ]]; then + echo "branch_name=$VER" >> "$GITHUB_ENV" else - echo "branch_name=dev" >> $GITHUB_ENV + echo "branch_name=dev" >> "$GITHUB_ENV" fi - name: Deploy Docs - if: github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/main')) + if: (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && (startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/main')) uses: peaceiris/actions-gh-pages@v3 with: deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} diff --git a/Makefile b/Makefile index d107c7a73..631e30d06 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ prep-docs: python $(docs_dir)/_scripts/prep_docs.py docs-build: prep-docs - NAPARI_CONFIG="" NAPARI_APPLICATION_IPY_INTERACTIVE=0 sphinx-build -M html docs/ docs/_build -D sphinx_gallery_conf.examples_dirs=$(GALLERY_PATH) $(SPHINXOPTS) + NAPARI_CONFIG="" NAPARI_APPLICATION_IPY_INTERACTIVE=0 sphinx-build -M html docs/ docs/_build -WT --keep-going -D sphinx_gallery_conf.examples_dirs=$(GALLERY_PATH) $(SPHINXOPTS) docs-xvfb: prep-docs NAPARI_CONFIG="" NAPARI_APPLICATION_IPY_INTERACTIVE=0 xvfb-run --auto-servernum sphinx-build -M html docs/ docs/_build -D sphinx_gallery_conf.examples_dirs=$(GALLERY_PATH) $(SPHINXOPTS) diff --git a/docs/_static/version_switcher.json b/docs/_static/version_switcher.json index 576d5f436..d4da23fba 100644 --- a/docs/_static/version_switcher.json +++ b/docs/_static/version_switcher.json @@ -5,11 +5,16 @@ "url": "https://napari.org/dev/" }, { - "name": "stable (0.5.0)", - "version": "0.5.0", + "name": "stable (0.5.1)", + "version": "0.5.1", "preferred": true, "url": "https://napari.org/stable/" }, + { + "name": "0.5.0", + "version": "0.5.0", + "url": "https://napari.org/0.5.0/" + }, { "name": "0.4.19", "version": "0.4.19", diff --git a/docs/_toc.yml b/docs/_toc.yml index ae9a58768..1a3502ccd 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -11,6 +11,7 @@ subtrees: entries: - file: tutorials/fundamentals/quick_start - file: tutorials/fundamentals/installation + - file: tutorials/fundamentals/installation_bundle_conda - file: tutorials/fundamentals/getting_started - file: tutorials/fundamentals/viewer - file: guides/layers @@ -180,6 +181,7 @@ subtrees: - file: release/index subtrees: - entries: + - file: release/release_0_5_1 - file: release/release_0_5_0 - file: release/release_0_4_19 - file: release/release_0_4_18 diff --git a/docs/community/meeting_schedule.md b/docs/community/meeting_schedule.md index b750f6b99..715bbfb3f 100644 --- a/docs/community/meeting_schedule.md +++ b/docs/community/meeting_schedule.md @@ -51,7 +51,8 @@ If you are using napari or interested in how napari could be used in your work, var modal = document.getElementById("eventDetailBackground"); modal.style.display = "block"; var eventTitle = eventObj.title.charAt(0).toUpperCase() + eventObj.title.slice(1); - document.getElementById("details").innerHTML = '' + eventTitle + '' + '
' + eventObj.extendedProps.description; + var eventLocation = eventObj.extendedProps.location; + document.getElementById("details").innerHTML = '' + eventTitle + '' + '
' + eventObj.extendedProps.description + '
' + 'Location: ' + ''+eventLocation+''; // When the user clicks on (x), close the modal span.onclick = function() { modal.style.display = "none"; diff --git a/docs/conf.py b/docs/conf.py index c14cd43dc..ab41f4d30 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -126,6 +126,8 @@ # The analytics script that is served by Plausible "plausible_analytics_url": "https://plausible.io/js/plausible.js", }, + "footer_start": ["napari-footer-links"], + "footer_end": ["napari-copyright"], } html_context = { @@ -229,7 +231,7 @@ def get_supported_python_versions(project_name): panels_add_bootstrap_css = False pygments_style = 'solarized-dark' -suppress_warnings = ['myst.header', 'etoc.toctree'] +suppress_warnings = ['myst.header', 'etoc.toctree', 'config.cache'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -324,6 +326,7 @@ def add_google_calendar_secrets(app, docname, source): if docname == 'community/meeting_schedule': source[0] = source[0].replace('{API_KEY}', GOOGLE_CALENDAR_API_KEY) + class FilterSphinxWarnings(logging.Filter): """Filter 'duplicate object description' warnings. @@ -349,16 +352,19 @@ def filter(self, record: logging.LogRecord) -> bool: return False return True + def qt_docstrings(app, what, name, obj, options, lines): """Only show first line of Qt threading docstrings. Avoids syntax errors since the Qt threading docstrings are written in Markdown, and injected into rst docstring automatically. """ - if "WorkerBase" in name: + ignore_list = ["WorkerBase", "FunctionWorker", "GeneratorWorker"] + if any([f in name for f in ignore_list]): if len(lines) > 0: del lines[1:] + def setup(app): """Set up docs build. diff --git a/docs/developers/coredev/packaging.md b/docs/developers/coredev/packaging.md index 65ddc6e94..2451d8c9f 100644 --- a/docs/developers/coredev/packaging.md +++ b/docs/developers/coredev/packaging.md @@ -26,7 +26,7 @@ This is all automated by the `conda-forge` infrastructure (see [previous example We only need to check that the metadata in the recipe has been adjusted for the new release. Pay special attention to the runtime dependencies and version strings! -> We keep a copy of the feedstock's recipe in the `napari/packaging` repo, which is updated manually whenever a change to `setup.cfg` is detected. +> We keep a copy of the feedstock's recipe in the `napari/packaging` repo, which is updated manually whenever a change to `pyproject.toml` is detected. > Check the file `conda-recipe/meta.yaml` and make sure its `outputs` contents are synced to the `napari-feedstock` copy. Once the conda-forge CI is passing and the PR is approved and merged, the final packages will be built on the default branch and uploaded to the `conda-forge` channel. @@ -36,6 +36,22 @@ Due to the staging steps and CDN synchronization delays, the conda packages can Check {doc}`release` for more details about the conda-forge release process and maintenance tasks. ``` +#### conda packaging split + +We provide three different outputs in the conda package recipe: + +- `napari-base`: This is the package that ships the actual source and data. The runtime + requirements only include the basic functionality. This package is recommended as a + dependency for plugins and other projects. Most end users will prefer the `napari` + package, below, but this one may be useful for those wanting a more minimal + environment. +- `napari`: This output is what most users want. It depends on `napari-base`, and adds optional yet + recommended dependencies for (performant) GUI usage, like the plugin manager or numba. Note that + the Qt backend is _not_ included. +- `napari-menu`: Depends on `napari`, and ships the menuinst JSON file, in case you want a desktop + shortcut to start the application easily. This is included as part of the bundled installers for + convenience. + ### conda packages in the `napari` channel The `napari` project also has a `napari` channel in anaconda.org. diff --git a/docs/release/release_0_5_1.md b/docs/release/release_0_5_1.md new file mode 100644 index 000000000..12b3dc8bb --- /dev/null +++ b/docs/release/release_0_5_1.md @@ -0,0 +1,114 @@ +# napari 0.5.1 + +*Thursday, Jul 25, 2024* + +We're happy to announce the release of napari 0.5.1! + +napari is a fast, interactive, multi-dimensional image viewer for Python. +It's designed for exploring, annotating, and analyzing multi-dimensional +images. It's built on Qt (for the GUI), VisPy (for performant GPU-based +rendering), and the scientific Python stack (NumPy, SciPy, and friends). + +For more information, examples, and documentation, please visit our website: +https://napari.org/ + +## Highlights + +napari 0.5.1 is a bugfix release hot on the heels of +[napari 0.5.0](release_0_5_0). It fixes a critical bug with creating viewers +multiple times within a single IPython/Jupyter session +([#7106](https://github.com/napari/napari/pull/7106)), as well as regressions +with viewing multiscale 3D time series +([#7103](https://github.com/napari/napari/pull/7103)) and with converting image +layers to labels layers ([#7095](https://github.com/napari/napari/pull/7095)). + +It also fixes a bug with NumPy 2 support +([#7104](https://github.com/napari/napari/pull/7104)) and our storing of layer +axis info when using the `channel_axis` keyword argument for images +([#7089](https://github.com/napari/napari/pull/7089)). + +Read on for the full list of changes since the last version from just two weeks +ago! + +## Improvements + +- [enh] add an `add_plane` convenience method to ClippingPlaneList ([#6921](https://github.com/napari/napari/pull/6921)) +- Cleanup _image_key_bindings ([#7116](https://github.com/napari/napari/pull/7116)) +- Add napari-plugin-manager to optional info list ([#7117](https://github.com/napari/napari/pull/7117)) + +## Bug Fixes + +- Move the _is_created assignment to the top ([#5078](https://github.com/napari/napari/pull/5078)) +- [Bugfix] Fix logic in setting settings using env vars. ([#6669](https://github.com/napari/napari/pull/6669)) +- Fix handling of units and axis_labels in add_image ([#7089](https://github.com/napari/napari/pull/7089)) +- Fix label conversion with proj mode ([#7095](https://github.com/napari/napari/pull/7095)) +- Account for displayed dimensions in multiscale translate adjustment ([#7103](https://github.com/napari/napari/pull/7103)) +- fix call of np.clip in _update_thumbnail ([#7104](https://github.com/napari/napari/pull/7104)) +- Always add `Empty` context key, even if `action` is already registered ([#7106](https://github.com/napari/napari/pull/7106)) +- fix condition of adding asterix, when save reader of path ([#7112](https://github.com/napari/napari/pull/7112)) +- Normalize path when searching for a plugin to open file ([#7127](https://github.com/napari/napari/pull/7127)) + +## Documentation + +- Add link to partners in README.md ([#7069](https://github.com/napari/napari/pull/7069)) +- Restore README image ([#7098](https://github.com/napari/napari/pull/7098)) +- Update docs constraints files for new napari-sphinx-theme release ([#7111](https://github.com/napari/napari/pull/7111)) +- Update release notes for 0.5.1 with new PRs ([docs#466](https://github.com/napari/docs/pull/466)) +- Update Bundled App Installation Instructions ([docs#74](https://github.com/napari/docs/pull/74)) +- Update Makefile to be consistent ([docs#448](https://github.com/napari/docs/pull/448)) +- Use plausible configuration by the PyData Sphinx Theme ([docs#453](https://github.com/napari/docs/pull/453)) +- More fixes to contributing documentation guide ([docs#454](https://github.com/napari/docs/pull/454)) +- Add location field to community calendar ([docs#455](https://github.com/napari/docs/pull/455)) +- Fix footer items ([docs#456](https://github.com/napari/docs/pull/456)) +- Add docs about the new `napari-base` structure ([docs#457](https://github.com/napari/docs/pull/457)) +- Add draft 0.5.1 release notes ([docs#464](https://github.com/napari/docs/pull/464)) +- Update draft warning on 0.5.1 release notes ([docs#465](https://github.com/napari/docs/pull/465)) +- Update release notes for 0.5.1 with new PRs ([docs#466](https://github.com/napari/docs/pull/466)) + +## Other Pull Requests + +- Remove ready to merge on update of constraints PR ([#6984](https://github.com/napari/napari/pull/6984)) +- Update `app-model`, `coverage`, `dask`, `fsspec`, `hypothesis`, `imageio`, `ipython`, `jsonschema`, `matplotlib`, `napari-svg`, `numpy`, `pillow`, `pint`, `pydantic`, `pyqt5`, `pyqt6`, `pytest`, `scipy`, `tifffile` ([#7045](https://github.com/napari/napari/pull/7045)) +- Add actionlint on CI ([#7049](https://github.com/napari/napari/pull/7049)) +- fix: set `target_commitish` for commit sha to fix benchmarks ([#7091](https://github.com/napari/napari/pull/7091)) +- Use `viewer.layers` instead of `_layers.model().sourceModel()._root` for dummy context creation ([#7109](https://github.com/napari/napari/pull/7109)) +- Limit setuptools vesion for minimum requirements test ([#7110](https://github.com/napari/napari/pull/7110)) +- [Maint] Update dockerfile for xpra source change ([#7115](https://github.com/napari/napari/pull/7115)) +- Fix pinning packages workflow by remove special pinning from macOS and add special for Windows ([#7119](https://github.com/napari/napari/pull/7119)) +- Trigger docs deployment on tagged commit ([#7122](https://github.com/napari/napari/pull/7122)) +- Update version switcher to include 0.5.0 ([docs#452](https://github.com/napari/docs/pull/452)) +- deploy docs on manual trigger ([docs#462](https://github.com/napari/docs/pull/462)) +- Add actionlint to prevent GHA workflow errors ([docs#463](https://github.com/napari/docs/pull/463)) + + +## 9 authors added to this release (alphabetical) + +(+) denotes first-time contributors 🥳 + +- [danieldegroot2](https://github.com/napari/napari/commits?author=danieldegroot2) - @danieldegroot2 + +- [Draga Doncila Pop](https://github.com/napari/napari/commits?author=DragaDoncila) - @DragaDoncila +- [Grzegorz Bokota](https://github.com/napari/napari/commits?author=Czaki) - @Czaki +- [jaime rodriguez-guerra](https://github.com/napari/napari/commits?author=jaimergp) ([docs](https://github.com/napari/docs/commits?author=jaimergp)) - @jaimergp +- [Juan Nunez-Iglesias](https://github.com/napari/napari/commits?author=jni) ([docs](https://github.com/napari/docs/commits?author=jni)) - @jni +- [Lorenzo Gaifas](https://github.com/napari/napari/commits?author=brisvag) - @brisvag +- [Markus Stabrin](https://github.com/napari/napari/commits?author=mstabrin) - @mstabrin +- [Melissa Weber Mendonça](https://github.com/napari/napari/commits?author=melissawm) ([docs](https://github.com/napari/docs/commits?author=melissawm)) - @melissawm +- [Peter Sobolewski](https://github.com/napari/napari/commits?author=psobolewskiPhD) - @psobolewskiPhD + + +## 11 reviewers added to this release (alphabetical) + +(+) denotes first-time contributors 🥳 + +- [andrew sweet](https://github.com/napari/docs/commits?author=andy-sweet) - @andy-sweet +- [Draga Doncila Pop](https://github.com/napari/napari/commits?author=DragaDoncila) - @DragaDoncila +- [Genevieve Buckley](https://github.com/napari/docs/commits?author=GenevieveBuckley) - @GenevieveBuckley +- [Grzegorz Bokota](https://github.com/napari/napari/commits?author=Czaki) - @Czaki +- [jaime rodriguez-guerra](https://github.com/napari/napari/commits?author=jaimergp) ([docs](https://github.com/napari/docs/commits?author=jaimergp)) - @jaimergp +- [Juan Nunez-Iglesias](https://github.com/napari/napari/commits?author=jni) ([docs](https://github.com/napari/docs/commits?author=jni)) - @jni +- [Lorenzo Gaifas](https://github.com/napari/napari/commits?author=brisvag) - @brisvag +- [Lucy Liu](https://github.com/napari/docs/commits?author=lucyleeow) - @lucyleeow +- [Melissa Weber Mendonça](https://github.com/napari/napari/commits?author=melissawm) ([docs](https://github.com/napari/docs/commits?author=melissawm)) - @melissawm +- [Peter Sobolewski](https://github.com/napari/napari/commits?author=psobolewskiPhD) - @psobolewskiPhD +- [Wouter-Michiel Vierdag](https://github.com/napari/docs/commits?author=melonora) - @melonora + diff --git a/docs/tutorials/assets/tutorials/installation/bundle_02.png b/docs/tutorials/assets/tutorials/installation/bundle_02.png new file mode 100644 index 000000000..e645a88fd Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_02.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_04.png b/docs/tutorials/assets/tutorials/installation/bundle_04.png new file mode 100644 index 000000000..e24bf7691 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_04.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_06.png b/docs/tutorials/assets/tutorials/installation/bundle_06.png new file mode 100644 index 000000000..f276fb592 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_06.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_07.png b/docs/tutorials/assets/tutorials/installation/bundle_07.png new file mode 100644 index 000000000..34c3bb8e3 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_07.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_09.png b/docs/tutorials/assets/tutorials/installation/bundle_09.png new file mode 100644 index 000000000..3e5a20085 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_09.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_10.png b/docs/tutorials/assets/tutorials/installation/bundle_10.png new file mode 100644 index 000000000..ad749aeb7 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_10.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_11.png b/docs/tutorials/assets/tutorials/installation/bundle_11.png new file mode 100644 index 000000000..b7dc5b2b4 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_11.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_13.png b/docs/tutorials/assets/tutorials/installation/bundle_13.png new file mode 100644 index 000000000..f4406806f Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_13.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_17.png b/docs/tutorials/assets/tutorials/installation/bundle_17.png new file mode 100644 index 000000000..33fba223e Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_17.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_18.png b/docs/tutorials/assets/tutorials/installation/bundle_18.png new file mode 100644 index 000000000..9b99d94a7 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_18.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_19.png b/docs/tutorials/assets/tutorials/installation/bundle_19.png new file mode 100644 index 000000000..d3d78d021 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_19.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_20.png b/docs/tutorials/assets/tutorials/installation/bundle_20.png new file mode 100644 index 000000000..2d67029e0 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_20.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_21.png b/docs/tutorials/assets/tutorials/installation/bundle_21.png new file mode 100644 index 000000000..013324a5a Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_21.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_22.png b/docs/tutorials/assets/tutorials/installation/bundle_22.png new file mode 100644 index 000000000..73a528648 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_22.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_24.png b/docs/tutorials/assets/tutorials/installation/bundle_24.png new file mode 100644 index 000000000..b9b6123e8 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_24.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_28.png b/docs/tutorials/assets/tutorials/installation/bundle_28.png new file mode 100644 index 000000000..ff0004484 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_28.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_29.png b/docs/tutorials/assets/tutorials/installation/bundle_29.png new file mode 100644 index 000000000..f17b32031 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_29.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_30.png b/docs/tutorials/assets/tutorials/installation/bundle_30.png new file mode 100644 index 000000000..49e86028d Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_30.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_31.png b/docs/tutorials/assets/tutorials/installation/bundle_31.png new file mode 100644 index 000000000..6c6a1da7b Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_31.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_32.png b/docs/tutorials/assets/tutorials/installation/bundle_32.png new file mode 100644 index 000000000..ef3bd28d2 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_32.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_33.png b/docs/tutorials/assets/tutorials/installation/bundle_33.png new file mode 100644 index 000000000..1aebbbbe0 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_33.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_34.png b/docs/tutorials/assets/tutorials/installation/bundle_34.png new file mode 100644 index 000000000..f030a8c07 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_34.png differ diff --git a/docs/tutorials/assets/tutorials/installation/bundle_35.png b/docs/tutorials/assets/tutorials/installation/bundle_35.png new file mode 100644 index 000000000..3b0a55049 Binary files /dev/null and b/docs/tutorials/assets/tutorials/installation/bundle_35.png differ diff --git a/docs/tutorials/fundamentals/installation.md b/docs/tutorials/fundamentals/installation.md index 781a1cc74..00f63a8f7 100644 --- a/docs/tutorials/fundamentals/installation.md +++ b/docs/tutorials/fundamentals/installation.md @@ -237,12 +237,6 @@ process described above working. The bundled app version of napari is the same version that you can get through the above described processes, and can still be extended with napari plugins installed directly via the app. -```{important} -Note that the bundled app is still -in active development, and may not be very stable. We strongly recommend -[installing as a Python package instead](install-python-package). -``` - To access the cross platform bundles you can visit our [release page](https://github.com/napari/napari/releases) and scroll to the release you are interested in. For example, the bundles for napari {{ napari_version }} can be @@ -250,6 +244,7 @@ accessed {{ '[here](https://github.com/napari/napari/releases/tag/vNAPARI_VER)'. To get to the download link, just scroll all the way to bottom of the page and expand the `Assets` section. You can then download the appropriate file for your platform. +Check {doc}`installation_bundle_conda` for more detailed instructions. diff --git a/docs/tutorials/fundamentals/installation_bundle_conda.md b/docs/tutorials/fundamentals/installation_bundle_conda.md new file mode 100644 index 000000000..6a51cf064 --- /dev/null +++ b/docs/tutorials/fundamentals/installation_bundle_conda.md @@ -0,0 +1,156 @@ +--- +jupyter: + jupytext: + formats: ipynb,md + text_representation: + extension: .md + format_name: markdown + format_version: '1.3' + jupytext_version: 1.13.0 + kernelspec: + display_name: Python 3 (ipykernel) + language: python + name: python3 +--- + +# How to install napari as a bundled app + +napari can be installed as a bundled app on [MacOS](#how-to-install-the-macos-bundle), [Windows](#how-to-install-the-windows-bundle), and [Linux](#how-to-install-the-linux-bundle) with a simple one click download and guided installation process. This installation method is best if you mainly want to use napari as a standalone GUI app. However, certain plugins may not be supported. + +```{note} +If you want to use napari from Python to programmatically interact with the app, please follow the [Python package installation guide](installation.md#install-as-python-package-recommended). This installation method is recommended to take full advantage of napari's features and to access additional plugins. +``` + +```{note} +If you want to contribute code back into napari, please follow the [development installation instructions in the contributing guide](napari-contributing). +``` + +To start, visit the [latest napari release page](https://github.com/napari/napari/releases/latest) and go to the 'Assets' tab and download the file that corresponds to your operating system: + +- Windows users will want the `*-Windows-x86_64.exe` installer. +- For macOS users, it depends on the processor. This can be checked by going to Apple menu > About This Mac. + - For Intel processors, download the `*-macOS-x86_64.pkg` installer + - For Apple processors, download the `*-macOS-arm64.pkg` installer. +- Linux users will need to choose the `*-Linux-x86_64.sh` installer. + +![Cropped screenshot of the GitHub Releases page for napari version 0.4.15. The expanded assets tab shows a number of installers available for different operating systems and architectures. Yellow rectangles highlight the files that correspond to the conda-based installers described in this tutorial.](../assets/tutorials/installation/bundle_02.png) + +```{note} +If you are interested in an earlier version of napari, you may access those files by scrolling below the latest release on the [napari release page](https://github.com/napari/napari/releases). The instructions below will work for napari versions 0.4.15 and above. +``` + +## Prerequisites + +This installation method does not have any prerequisites. + +### How to install the macOS bundle + +Once you have downloaded the appropriate macOS package file, you will have a file with a name like `napari-0.5.0-macOS-x86_64.pkg`. Double click this file to open the installer. + +![Cropped screenshot of macOS desktop UI showing the icon of the PKG installer file, and an arrow pointing to the Welcome page in the opened PKG installer.](../assets/tutorials/installation/bundle_04.png) + +Click 'Continue' to open the Software License Agreement. + +![Cropped screenshot of the License page in an opened PKG installer, showing the BSD 3-Clause License text and four buttons: Print, Save, Go Back and Continue.](../assets/tutorials/installation/bundle_06.png) + +After reading this agreement, click 'Continue' to be prompted to agree to the Software License Agreement in order to proceed with installation. + +![Cropped screenshot of the License page prompting the user to agree to the napari Software License Agreement. The dialog contains three buttons: Read License, Disagree and Agree.](../assets/tutorials/installation/bundle_07.png) + +Click on 'Agree'. On the following page, you will be shown how much space the installation will use and can begin the standard installation by clicking 'Install.' + +![Cropped screenshot of the Installation Type page on the PKG installer. It reports the estimated space the installation will use (2.45 GB in this example) and shows four buttons: Change Install Location, Customize, Go Back and Install.](../assets/tutorials/installation/bundle_09.png) + +However, if you would like to change the default location for the installation, you may specify a different location by clicking 'Change Install Location…' and following the subsequent prompts before starting the installation. + +You can also optionally click on 'Customize' to disable or enable some aspects of the installation process. + +The installation progress can be monitored on the following window. Some notifications will appear in the top right corner of your display with further details. + +![Cropped screenshot of the Installation page of the PKG installer. This page displays a progress bar at a 10%. In the top right corner, an example of a system notification with the text 'Installing packages. This might take a few minutes' is shown](../assets/tutorials/installation/bundle_10.png) + +```{note} +If an error ocurred during the installation, do not close the installer immediately. Before doing so, please inspect the logs by clicking on Window > Installer log or pressing + L. In the Detail Level dropdown, choose 'Show All Logs' and click on Save to keep a copy of the contents in a text file. This will be useful if you want to [submit an issue](https://github.com/napari/napari/issues/new/choose). +``` + +After finishing with no errors, a new page with the text "The installation was successful" will appear, as shown below. + +![Cropped screenshot of the final page of the PKG installer, Summary, reporting "The installation was successful" with a green check mark icon. A blue Close button is available.](../assets/tutorials/installation/bundle_11.png) + +Click Close to finish. You can now get started using napari! Use Launchpad to open the application. + +![Montage of two cropped screenshots. On the left, the macOS finder icon and the Launchpad icon, highlighted with a red circle. On the right, the opened launchpad UI showing a 4x4 grid of applications icon, with napari appearing in the bottom right corner.](../assets/tutorials/installation/bundle_13.png) + +```{note} +The first time you open napari you must use the Launchpad, but in subsequent uses, the napari application should show up in Spotlight search ( + spacebar). The application shortcut will also be available in Finder, under 🏠 [User directory] > Applications. +``` + +napari comes installed with sample images from scikit-image. Use the dropdown menu File > Open Sample > napari to open a sample image, or open one of your own images using File > Open or dragging and dropping your image onto the canvas. + +Next check out our [tutorial on the viewer](viewer.md) or explore any of the pages under the [Usage tab](../../usage.md). + +### How to Install the Windows bundle + +Once you have downloaded the Windows executable file, you will have a file with a name like `napari-0.5.0-Windows-x86_64.exe`. Double click this file to open the napari Setup. + +![Montage of the napari EXE installer icon with an arrow pointing to the Welcome page of the napari EXE installer on Windows.](../assets/tutorials/installation/bundle_17.png) + +Click Next to continue and go to the License page. Read the contents and, if you agree, continue by clicking 'I Agree'. + +![Cropped screenshot of the License Agreement page of the napari EXE installer. A scrollable text area displays the legal text. Three buttons are available: Back, I Agree, and Cancel.](../assets/tutorials/installation/bundle_18.png) + +The recommended installation method is to install napari just for the current user ("Just Me"): + +![Cropped screenshot of the Setup Instalation Type page of the napari EXE installer. Two options are available: Just Me (recommended), and All Users (requires admin privileges). At the bottom, three buttons Back, Next and Cancel are displayed.](../assets/tutorials/installation/bundle_19.png) + +On the next page you will be shown how much space will be used by the installation and the default destination folder, which can be changed by using the 'Browse' button. Click 'Next' to continue. + +![Cropped screenshot of the Choose Install Location page of the napari EXE installer. A text field next to a Browse button shows the default installation path. Additional text below reports the required space for the installation (2.6 GB) and the total space available on disk (61.1 GB). The three buttons at the bottom read Back, Next and Cancel.](../assets/tutorials/installation/bundle_20.png) + +On the next page, click 'Install' to start the installation process. Installation progress can be monitored on the following page. By clicking on 'Show details', you can obtain more information on the ongoing tasks. You can right-click on this new text area to copy the contents to the clipboard if needed. + +![Cropped screenshot of the Installation process page of the napari EXE installer. A progress bar at around 95% reads "Setting up the package cache...". A button with the text "Show details" is available below. At the bottom of the dialog, three grayed out buttons read Back, Next, and Cancel.](../assets/tutorials/installation/bundle_22.png) + +Once installation is complete, you will see the page below. Click 'Finish' to close the installation wizard. + +![Cropped screenshot of the final page of the napari EXE installer. It reports that the installation has finished successfully and that the dialog can be closed by clicking on the Finish button at the bottom.](../assets/tutorials/installation/bundle_24.png) + +You can now get started using napari! A shortcut to launch napari can be found in the Windows Start menu. + +napari comes installed with sample images from scikit-image. Use the dropdown menu File > Open Sample > napari to open a sample image, or open one of your own images using File > Open or dragging and dropping your image onto the canvas. + +Next check out our [tutorial on the viewer](viewer.md) or explore any of the pages under the [Usage tab](../../usage.md). + +### How to Install the Linux bundle + +Once you have downloaded the Linux SH file, you will have a file with a name like `napari-0.5.0-Linux-x86_64.sh`. Open a new terminal window, navigate to the downloads folder (usually `cd ~/Downloads`) and run the command `bash napari-*-Linux-x86_64.sh`. + +![Montage of the SH installer icon on Ubuntu, with an arrow pointing to an open terminal instance with a pre-typed command that reads 'bash napari-0.4.14.dev73-Linux-x86_64.sh'.](../assets/tutorials/installation/bundle_28.png) + +Press Enter to display the License Agreement. + +![Cropped screenshot of the default Ubuntu terminal displaying the welcome paragraphs of the text-based installer of napari for Linux systems.](../assets/tutorials/installation/bundle_29.png) + +Read through the agreement shown below. You must agree to the terms by typing out `yes` and pressing Enter to continue. + +![Cropped screenshot of the default Ubuntu terminal displaying the first paragraphs of a BSD-3 Clause License text.](../assets/tutorials/installation/bundle_30.png) + +![Cropped screenshot of the default Ubuntu terminal displaying the last paragraphs of a BSD-3 Clause License text, plus a prompt asking 'Do you accept the license terms?', to which the user must respond 'yes' or 'no'.](../assets/tutorials/installation/bundle_31.png) + +Next you will be shown the default location for the installation. You may confirm this location by pressing Enter. Alternatively, specify a different location by typing out its absolute path. If it does not exist, it will be created. The terminal will then begin the installation process. + +![Montage of two instances of the default Ubuntu terminal showing the default installation path, followed by the first extraction steps of the installation process.](../assets/tutorials/installation/bundle_32.png) + +If the installation is successful, the terminal will display a message with the text 'Installation finished'. + +![Cropped screenshot of the default Ubuntu terminal displaying the last steps of the installation process. The last line of text reads 'installation finished'.](../assets/tutorials/installation/bundle_33.png) + +You can now get started using napari! A shortcut to launch napari should appear on your desktop or application menu. Under some Linux desktop environments, you can also search for 'napari' using the desktop search bar. + +![Full screenshot of the application menu in the Ubuntu desktop environment. A 6x4 grid of application icons includes the napari icon on the third row, third column, highlighted with a red circle.](../assets/tutorials/installation/bundle_34.png) + +![Full screenshot of the Ubuntu search menu, with the query 'napari', displaying some results which include the application icon for the installed napari.](../assets/tutorials/installation/bundle_35.png) + +napari comes installed with sample images from scikit-image. Use the dropdown menu File > Open Sample > napari to open a sample image, or open one of your own images using File > Open or dragging and dropping your image onto the canvas. + +Next check out our [tutorial on the viewer](viewer.md) or explore any of the pages under the [Usage tab](../../usage.md). diff --git a/requirements.txt b/requirements.txt index 857e139b3..0e3c3f893 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,3 +12,4 @@ napari-sphinx-theme>=0.3.0 matplotlib lxml_html_clean imageio-ffmpeg +pytest