From ff64a0e935cbd6fe0b1540a7881d8946bdb00ea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nico=20Schl=C3=B6mer?= Date: Mon, 20 Dec 2021 06:38:28 +0100 Subject: [PATCH] make meshio an optional dependency (#1939) * make meshio an optional dependency * add import guards * make flake8 happy Co-authored-by: Alex Kaszynski --- pyvista/core/filters/unstructured_grid.py | 3 +-- pyvista/utilities/errors.py | 10 ++++++---- pyvista/utilities/fileio.py | 21 ++++++++++++++++++--- requirements_test.txt | 1 + setup.py | 5 +++-- 5 files changed, 29 insertions(+), 11 deletions(-) diff --git a/pyvista/core/filters/unstructured_grid.py b/pyvista/core/filters/unstructured_grid.py index 00d1d0b5dc..f5a6a4fab0 100644 --- a/pyvista/core/filters/unstructured_grid.py +++ b/pyvista/core/filters/unstructured_grid.py @@ -1,10 +1,9 @@ """Filters module with a class to manage filters/algorithms for unstructured grid datasets.""" from functools import wraps -import pyvista from pyvista import abstract_class -from pyvista.core.filters.poly_data import PolyDataFilters from pyvista.core.filters.data_set import DataSetFilters +from pyvista.core.filters.poly_data import PolyDataFilters @abstract_class diff --git a/pyvista/utilities/errors.py b/pyvista/utilities/errors.py index 11384b0618..4e0563f3fa 100644 --- a/pyvista/utilities/errors.py +++ b/pyvista/utilities/errors.py @@ -281,12 +281,14 @@ def __init__(self, additional=None, ncol=3, text_width=80, sort=False, """ # Mandatory packages. - core = ['pyvista', 'vtk', 'numpy', 'imageio', 'appdirs', 'scooby', - 'meshio'] + core = ['pyvista', 'vtk', 'numpy', 'imageio', 'appdirs', 'scooby'] # Optional packages. - optional = ['matplotlib', 'pyvistaqt', 'PyQt5', 'IPython', 'colorcet', - 'cmocean', 'ipyvtklink', 'scipy', 'itkwidgets', 'tqdm'] + optional = [ + 'matplotlib', 'pyvistaqt', 'PyQt5', 'IPython', 'colorcet', + 'cmocean', 'ipyvtklink', 'scipy', 'itkwidgets', 'tqdm', + 'meshio', + ] # Information about the GPU - bare except in case there is a rendering # bug that the user is trying to report. diff --git a/pyvista/utilities/fileio.py b/pyvista/utilities/fileio.py index 64382b5032..5441c8c64f 100644 --- a/pyvista/utilities/fileio.py +++ b/pyvista/utilities/fileio.py @@ -282,7 +282,9 @@ def read(filename, attrs=None, force_ext=None, file_format=None): * ``'.foam'`` .. note:: - See https://github.com/nschloe/meshio for formats supported by ``meshio``. + See https://github.com/nschloe/meshio for formats supported by + ``meshio``. Be sure to install ``meshio`` with ``pip install + meshio`` if you wish to use it. Parameters ---------- @@ -635,7 +637,13 @@ def from_meshio(mesh): def read_meshio(filename, file_format=None): """Read any mesh file using meshio.""" - import meshio + try: + import meshio + except ImportError: # pragma: no cover + raise ImportError( + "To use this feature install meshio with:\n\n" + "pip install meshio" + ) # Make sure relative paths will work filename = os.path.abspath(os.path.expanduser(str(filename))) @@ -673,7 +681,14 @@ def save_meshio(filename, mesh, file_format=None, **kwargs): >>> pyvista.save_meshio('mymesh.inp', sphere) # doctest:+SKIP """ - import meshio + try: + import meshio + except ImportError: # pragma: no cover + raise ImportError( + "To use this feature install meshio with:\n\n" + "pip install meshio" + ) + from meshio.vtk._vtk import vtk_to_meshio_type # Make sure relative paths will work diff --git a/requirements_test.txt b/requirements_test.txt index 06e05f0c31..347e5ad95d 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -19,3 +19,4 @@ param==1.10.1 ipygany pytest-xdist pythreejs +meshio>=4.0.3, <5.0 diff --git a/setup.py b/setup.py index 6bad131c3f..da3d7e6558 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,6 @@ 'pillow', 'appdirs', 'scooby>=0.5.1', - 'meshio>=4.0.3, <5.0', 'vtk', 'dataclasses;python_version=="3.6"', 'typing_extensions;python_version<="3.7"', @@ -70,6 +69,8 @@ python_requires='>=3.6.*', install_requires=install_requires, extras_require={ - 'colormaps': ['matplotlib', 'colorcet', 'cmocean'] + 'all': ['matplotlib', 'colorcet', 'cmocean', 'meshio'], + 'colormaps': ['matplotlib', 'colorcet', 'cmocean'], + 'io': ['meshio>=4.0.3, <5.0'], }, )