pymc icon indicating copy to clipboard operation
pymc copied to clipboard

netCDF4 import error on M1 macOS: `symbol not found in flat namespace '_H5get_libversion'`

Open ohad-monday opened this issue 3 years ago • 6 comments

Description of your problem

Please provide a minimal, self-contained, and reproducible example.

import pymc as pm

Please provide the full traceback.

running on mac m1 - installed pymc but can't import pymc - getting an error

ImportError Traceback (most recent call last) Input In [1], in <cell line: 1>() ----> 1 import pymc as pm

File /opt/homebrew/lib/python3.9/site-packages/pymc/init.py:52, in 47 aesara.config.gcc__cxxflags = augmented 50 __set_compiler_flags() ---> 52 from pymc import gp, ode, sampling 53 from pymc.aesaraf import * 54 from pymc.backends import *

File /opt/homebrew/lib/python3.9/site-packages/pymc/gp/init.py:15, in 1 # Copyright 2020 The PyMC Developers 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); (...) 12 # See the License for the specific language governing permissions and 13 # limitations under the License. ---> 15 from pymc.gp import cov, mean, util 16 from pymc.gp.gp import ( 17 TP, 18 Latent, (...) 23 MarginalSparse, 24 )

File /opt/homebrew/lib/python3.9/site-packages/pymc/gp/util.py:37, in 34 from pymc.aesaraf import compile_pymc, walk_model 36 # Avoid circular dependency when importing modelcontext ---> 37 from pymc.distributions.distribution import NoDistribution 39 assert NoDistribution # keep both pylint and black happy 40 from pymc.model import modelcontext

File /opt/homebrew/lib/python3.9/site-packages/pymc/distributions/init.py:21, in 1 # Copyright 2020 The PyMC Developers 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); (...) 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 15 from pymc.distributions.logprob import ( # isort:skip 16 logcdf, 17 logp, 18 joint_logpt, 19 ) ---> 21 from pymc.distributions.bound import Bound 22 from pymc.distributions.censored import Censored 23 from pymc.distributions.continuous import ( 24 AsymmetricLaplace, 25 Beta, (...) 57 Weibull, 58 )

File /opt/homebrew/lib/python3.9/site-packages/pymc/distributions/bound.py:23, in 20 from aesara.tensor.var import TensorVariable 22 from pymc.aesaraf import floatX, intX ---> 23 from pymc.distributions.continuous import BoundedContinuous, bounded_cont_transform 24 from pymc.distributions.dist_math import check_parameters 25 from pymc.distributions.distribution import Continuous, Discrete

File /opt/homebrew/lib/python3.9/site-packages/pymc/distributions/continuous.py:88, in 76 from pymc.distributions import transforms 77 from pymc.distributions.dist_math import ( 78 SplineWrapper, 79 check_parameters, (...) 86 zvalue, 87 ) ---> 88 from pymc.distributions.distribution import DIST_PARAMETER_TYPES, Continuous 89 from pymc.distributions.shape_utils import rv_size_is_none 90 from pymc.distributions.transforms import _default_transform

File /opt/homebrew/lib/python3.9/site-packages/pymc/distributions/distribution.py:50, in 36 from pymc.aesaraf import change_rv_size 37 from pymc.distributions.shape_utils import ( 38 Dims, 39 Shape, (...) 48 resize_from_observed, 49 ) ---> 50 from pymc.printing import str_for_dist, str_for_symbolic_dist 51 from pymc.util import UNSET 52 from pymc.vartypes import string_types

File /opt/homebrew/lib/python3.9/site-packages/pymc/printing.py:25, in 22 from aesara.tensor.random.basic import RandomVariable 23 from aesara.tensor.var import TensorConstant ---> 25 from pymc.model import Model 27 all = [ 28 "str_for_dist", 29 "str_for_model", 30 "str_for_potential_or_deterministic", 31 ] 34 def str_for_dist(rv: TensorVariable, formatting: str = "plain", include_params: bool = True) -> str:

File /opt/homebrew/lib/python3.9/site-packages/pymc/model.py:64, in 62 from pymc.distributions.transforms import _default_transform 63 from pymc.exceptions import ImputationWarning, SamplingError, ShapeError, ShapeWarning ---> 64 from pymc.initial_point import make_initial_point_fn 65 from pymc.math import flatten_list 66 from pymc.util import ( 67 UNSET, 68 WithMemoization, (...) 72 treelist, 73 )

File /opt/homebrew/lib/python3.9/site-packages/pymc/initial_point.py:28, in 25 from aesara.tensor.var import TensorVariable 27 from pymc.aesaraf import compile_pymc, find_rng_nodes, reseed_rngs ---> 28 from pymc.util import get_transformed_name, get_untransformed_name, is_transformed_name 30 StartDict = Dict[Union[Variable, str], Union[np.ndarray, Variable, str]] 31 PointType = Dict[str, np.ndarray]

File /opt/homebrew/lib/python3.9/site-packages/pymc/util.py:19, in 15 import functools 17 from typing import Dict, List, Tuple, Union, cast ---> 19 import arviz 20 import cloudpickle 21 import numpy as np

File /opt/homebrew/lib/python3.9/site-packages/arviz/init.py:32, in 26 super()._log(level, msg, *args, **kwargs) 29 _log = Logger("arviz") ---> 32 from .data import * 33 from .plots import * 34 from .plots.backends import *

File /opt/homebrew/lib/python3.9/site-packages/arviz/data/init.py:3, in 1 """Code for loading and manipulating data structures.""" 2 from .base import CoordSpec, DimSpec, dict_to_dataset, numpy_to_data_array ----> 3 from .converters import convert_to_dataset, convert_to_inference_data 4 from .datasets import clear_data_home, list_datasets, load_arviz_data 5 from .inference_data import InferenceData, concat

File /opt/homebrew/lib/python3.9/site-packages/arviz/data/converters.py:6, in 3 import xarray as xr 5 from .base import dict_to_dataset ----> 6 from .inference_data import InferenceData 7 from .io_cmdstan import from_cmdstan 8 from .io_cmdstanpy import from_cmdstanpy

File /opt/homebrew/lib/python3.9/site-packages/arviz/data/inference_data.py:27, in 12 import re 13 from typing import ( 14 TYPE_CHECKING, 15 Any, (...) 24 overload, 25 ) ---> 27 import netCDF4 as nc 28 import numpy as np 29 import xarray as xr

File /opt/homebrew/lib/python3.9/site-packages/netCDF4/init.py:3, in 1 # init for netCDF4. package 2 # Docstring comes from extension module _netCDF4. ----> 3 from ._netCDF4 import * 4 # Need explicit imports for names beginning with underscores 5 from ._netCDF4 import doc

ImportError: dlopen(/opt/homebrew/lib/python3.9/site-packages/netCDF4/_netCDF4.cpython-39-darwin.so, 0x0002): symbol not found in flat namespace '_H5get_libversion'


Please provide any additional information below.

Versions and main components

  • PyMC/PyMC3 Version: 4.0.0
  • Aesara/Theano Version: aesara 2.6.6
  • Python Version: 3.9.12
  • Operating system: MacOs Monterey
  • How did you install PyMC/PyMC3: (pip)

ohad-monday avatar Jun 18 '22 08:06 ohad-monday

Same issue here with near identical setup, install and hardware.

NervousEnergy1979 avatar Jun 20 '22 14:06 NervousEnergy1979

Had similar issue. Installing from the macos-specific wheel helped me. Refer to this thread, especially towards the end of it.

amChristonasis avatar Jun 20 '22 14:06 amChristonasis

@amChristonasis thank you!!! indeed it worked

solved it: brew install hdf5 netcdf git clone https://github.com/Unidata/netcdf4-python.git HDF5_DIR=$(brew --prefix hdf5) pip install ./netcdf4-python

ohad-monday avatar Jun 20 '22 18:06 ohad-monday

@ohad-monday Nice to hear!

amChristonasis avatar Jun 20 '22 20:06 amChristonasis

@amChristonasis thank you!!! indeed it worked

solved it: brew install hdf5 netcdf git clone https://github.com/Unidata/netcdf4-python.git HDF5_DIR=$(brew --prefix hdf5) pip install ./netcdf4-python

You can save yourself the git-clone step with,

HDF5_DIR=$(brew --prefix hdf5) pip install netcdf4 --no-binary :all:

Thanks a lot for this.

AlexIoannides avatar Jun 21 '22 09:06 AlexIoannides

I originally tried this, but it did not work for me:

You can save yourself the git-clone step with,

HDF5_DIR=$(brew --prefix hdf5) pip install netcdf4 --no-binary :all:

However, this did:

solved it:

brew install hdf5 netcdf      
git clone https://github.com/Unidata/netcdf4-python.git       
HDF5_DIR=$(brew --prefix hdf5) pip install ./netcdf4-python      

Perhaps it's worth just git cloning from the get go

janisshin avatar Jun 25 '22 02:06 janisshin

Closing this as it doesn't sound like a PyMC issue and a workaround has been described in the comments

ricardoV94 avatar Sep 07 '22 11:09 ricardoV94

Hi to all commentators here, I refered to your solutions here to solve this error:

`File /Applications/anaconda3/envs/PET/lib/python3.9/site-packages/py_eddy_tracker/dataset/grid.py:10
      8 from cv2 import filter2D
      9 from matplotlib.path import Path as BasePath
---> 10 from netCDF4 import Dataset
     11 from numba import njit, prange, types as numba_types
     12 from numpy import (
     13     arange,
     14     array,
   (...)
     42     zeros,
     43 )

File /Applications/anaconda3/envs/PET/lib/python3.9/site-packages/netCDF4/__init__.py:3
      1 # init for netCDF4. package
      2 # Docstring comes from extension module _netCDF4.
----> 3 from ._netCDF4 import *
      4 # Need explicit imports for names beginning with underscores
      5 from ._netCDF4 import __doc__

ImportError: dlopen(/Applications/anaconda3/envs/PET/lib/python3.9/site-packages/netCDF4/_netCDF4.cpython-39-darwin.so, 0x0002): symbol not found in flat namespace '_H5get_libversion'`

with no success, I tried both git cloning that resulted in :

`Building wheels for collected packages: netCDF4
  Building wheel for netCDF4 (pyproject.toml) ... error
  error: subprocess-exited-with-error
  
  × Building wheel for netCDF4 (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [50 lines of output]
      -L/opt/homebrew/Cellar/netcdf/4.9.2_1/lib -lnetcdf
      reading from setup.cfg...
      using nc-config...
      checking /opt/homebrew/Cellar/netcdf/4.9.2_1/include...
      hdf5 headers not found in /opt/homebrew/Cellar/netcdf/4.9.2_1/include
      nc-config did provide path to HDF5 headers, search standard locations...
      checking /opt/homebrew/opt/hdf5/include...
      HDF5 library version: 1.14.3 headers found in /opt/homebrew/opt/hdf5/include
      HDF5 library version: 1.14.3 found in /opt/homebrew/opt/hdf5
      using netcdf library version b'4.9.2'
      using Cython to compile netCDF4.pyx...
      netcdf lib does not have parallel functions
      NETCDF_PLUGIN_DIR not set, no netcdf compression plugins installed
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.macosx-11.1-arm64-cpython-311
      creating build/lib.macosx-11.1-arm64-cpython-311/netCDF4
      copying src/netCDF4/__init__.py -> build/lib.macosx-11.1-arm64-cpython-311/netCDF4
      copying src/netCDF4/utils.py -> build/lib.macosx-11.1-arm64-cpython-311/netCDF4
      running egg_info
      writing src/netCDF4.egg-info/PKG-INFO
      writing dependency_links to src/netCDF4.egg-info/dependency_links.txt
      writing entry points to src/netCDF4.egg-info/entry_points.txt
      writing requirements to src/netCDF4.egg-info/requires.txt
      writing top-level names to src/netCDF4.egg-info/top_level.txt
      reading manifest file 'src/netCDF4.egg-info/SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      warning: no previously-included files found matching 'examples/data'
      warning: no previously-included files found matching 'src/netCDF4/_netCDF4.c'
      adding license file 'LICENSE'
      writing manifest file 'src/netCDF4.egg-info/SOURCES.txt'
      copying src/netCDF4/_netCDF4.pyx -> build/lib.macosx-11.1-arm64-cpython-311/netCDF4
      creating build/lib.macosx-11.1-arm64-cpython-311/netCDF4/plugins
      copying src/netCDF4/plugins/empty.txt -> build/lib.macosx-11.1-arm64-cpython-311/netCDF4/plugins
      running build_ext
      Compiling src/netCDF4/_netCDF4.pyx because it changed.
      [1/1] Cythonizing src/netCDF4/_netCDF4.pyx
      building 'netCDF4._netCDF4' extension
      creating build/temp.macosx-11.1-arm64-cpython-311
      creating build/temp.macosx-11.1-arm64-cpython-311/external
      creating build/temp.macosx-11.1-arm64-cpython-311/external/nc_complex
      creating build/temp.macosx-11.1-arm64-cpython-311/external/nc_complex/src
      creating build/temp.macosx-11.1-arm64-cpython-311/src
      creating build/temp.macosx-11.1-arm64-cpython-311/src/netCDF4
      clang -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /Applications/anaconda3/include -arch arm64 -fPIC -O2 -isystem /Applications/anaconda3/include -arch arm64 -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -DNC_COMPLEX_NO_EXPORT=1 -I/opt/homebrew/Cellar/netcdf/4.9.2_1/include -I/opt/homebrew/opt/hdf5/include -I/private/var/folders/rt/z9t34vnn4wzfcwhkjnphx6980000gn/T/pip-build-env-gd3c91ta/overlay/lib/python3.11/site-packages/numpy/core/include -Iinclude -Iexternal/nc_complex/include -Iexternal/nc_complex/include/generated_fallbacks -I/Applications/anaconda3/include/python3.11 -c external/nc_complex/src/nc_complex.c -o build/temp.macosx-11.1-arm64-cpython-311/external/nc_complex/src/nc_complex.o
      clang: error: no such file or directory: 'external/nc_complex/src/nc_complex.c'
      clang: error: no input files
      error: command '/usr/bin/clang' failed with exit code 1
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for netCDF4
Failed to build netCDF4
ERROR: Could not build wheels for netCDF4, which is required to install pyproject.toml-based projects`

and using :

HDF5_DIR=$(brew --prefix hdf5) pip install netcdf4 --no-binary :all:

which succeeded but didn't solve the original error.. any insights from people who had this issue previously? tnx

Mrvy29 avatar Dec 26 '23 10:12 Mrvy29