Skip to main content

Python interface to the ecCodes GRIB and BUFR decoder/encoder

Project description

https://img.shields.io/pypi/v/eccodes.svg

Python 3 interface to decode and encode GRIB and BUFR files via the ECMWF ecCodes library.

Features:

  • reads and writes GRIB 1 and 2 files,

  • reads and writes BUFR 3 and 4 files,

  • supports all modern versions of Python and PyPy3,

  • works on most Linux distributions and MacOS, the ecCodes C-library is the only system dependency,

  • PyPI package can be installed without compiling, at the cost of being twice as slow as the original ecCodes module,

  • an optional compile step makes the code as fast as the original module but it needs the recommended (the most up-to-date) version of ecCodes.

Limitations:

  • Microsoft Windows support is untested.

Installation

From version 2.37.0, the ecCodes Python bindings additionally provide the ecCodes binary library, and will follow the version numbering of the ecCodes binary library. See below for details.

The package can be installed from PyPI with:

$ pip install eccodes

This installation will, by default, include the ecCodes binary library (as of version 2.37.0), meaning that no external ecCodes binary library is required. If you have an external ecCodes binary library that you wish to use, set the following environment variable before you import eccodes:

$ export ECCODES_PYTHON_USE_FINDLIBS=1

If this is set, the ecCodes’ Python bindings will use the findlibs package to locate the binary library (findlibs was the only mechanism used before version 2.37.0).

In order to gain insights into the search for the binary library, set the following environment variable before importing eccodes:

$ export ECCODES_PYTHON_TRACE_LIB_SEARCH=1

You may also install a version of ecCodes’ Python interface that does not include a binary library at all, in which case the findlibs mechanism will be used as before:

$ pip install eccodes --no-binary eccodes

System dependencies

The Python module depends on the ECMWF ecCodes library. From version 2.37.0, this is supplied with the Python module. If you wish to install and use a separate binary library (see above), it must be installed on the system and accessible as a shared library.

On a MacOS with HomeBrew use:

$ brew install eccodes

Or if you manage binary packages with Conda use:

$ conda install -c conda-forge eccodes

As an alternative you may install the official source distribution by following the instructions at https://confluence.ecmwf.int/display/ECC/ecCodes+installation

You may run a simple selfcheck command to ensure that your system is set up correctly:

$ python -m eccodes selfcheck
Found: ecCodes v2.37.0.
Your system is ready.

Usage

Refer to the ecCodes documentation pages for usage.

Experimental features

Fast bindings

To test the much faster CFFI API level, out-of-line mode you need the ecCodes header files. Then you need to clone the repo in the same folder as your ecCodes source tree, make a pip development install and custom compile the binary bindings:

$ git clone https://github.com/ecmwf/eccodes-python
$ cd eccodes-python
$ pip install -e .
$ python builder.py

To revert back to ABI level, in-line mode just remove the compiled bindings:

$ rm gribapi/_bindings.*

Project resources

Development

https://github.com/ecmwf/eccodes-python

Download

https://pypi-hypernode.com/project/eccodes

Contributing

The main repository is hosted on GitHub, testing, bug reports and contributions are highly welcomed and appreciated:

https://github.com/ecmwf/eccodes-python

Please see the CONTRIBUTING.rst document for the best way to help.

Maintainer:

Contributors:

See also the list of contributors who participated in this project.

License

© Copyright 2017- ECMWF.

This software is licensed under the terms of the Apache Licence Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.

In applying this licence, ECMWF does not waive the privileges and immunities granted to it by virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.

Changelog for eccodes-python

2.38.0 (2024-09-25)

  • ECC-1790: Add codes_get_offset

  • ECC-1899: API function to allow setting debug level

  • Function to query library features

2.37.0 (2024-09-09)

  • bundle ecCodes binary library with the PyPi distribution, for Linux and MacOS

1.7.1 (2024-06-19)

  • np.Infinity was removed in the NumPy 2.0 release

1.7.0 (2024-02-26)

  • ECC-1761: Add function to extract message offsets and sizes

  • ECC-1742: Add function to clone only the meta-data of a message

1.6.1 (2023-10-02)

  • ECC-1693: Update minimum recommended version

  • Fix flake8 warning E721

1.6.0 (2023-07-11)

  • ECC-1630: Get API version as an integer

  • ECC-1622: Drop Python version 3.7

  • ECC-1601: GRIB: Support data values array decoded in single-precision

  • ECC-1611: Add function to determine if a BUFR key is a coordinate descriptor

1.5.2 (2023-04-04)

  • Add support for Python versions 3.10 and 3.11

  • ECC-1555: 2D numpy array incorrectly handled

  • ECC-1539: Use the ‘warnings’ library for selfcheck

  • ECC-1538: Add support for CODES_TYPE_BYTES

  • ECC-1524: Check values in High-level Message.set function should retrieve based on value type

  • ECC-1527: Handle floats in high-level Message.set function check values

1.5.1 (2023-01-25)

  • ECC-1446: Data file era5-levels-members.grib not included in released tar file

  • ECC-1460: Cannot import eccodes on M1 MacBook Pro

  • ECC-1505: High-level Message.set function should allow dictionary and check result

1.5.0 (2022-08-25)

  • ECC-1404: Add the grib_get_gaussian_latitudes() function

  • ECC-1405: Add new function: codes_any_new_from_samples

  • ECC-1415: Implement a higher-level Python interface (still experimental)

  • ECC-1429: Remove the file ‘eccodes/messages.py’

  • GitHub pull request #62: add pypi badge

1.4.2 (2022-05-20)

  • ECC-1389: Drop Python version 3.5 and 3.6

  • ECC-1390: NameError: name ‘GribInternalError’ is not defined

  • Add test for GRIB bitmap

1.4.1 (2022-03-03)

  • ECC-1351: Support numpy.int64 in codes_set() and codes_set_long()

  • ECC-1317: Data file tiggelam_cnmc_sfc.grib2 not included in released tar file

1.4.0 (2021-12-03)

  • ECC-1234: Remove the experimental high-level interface

  • ECC-1282: Add codes_dump()

1.3.4 (2021-08-27)

  • Update documentation

1.3.3 (2021-06-21)

  • ECC-1246: UnicodeDecodeError when parsing BUFR file

1.3.2 (2021-04-16)

  • Restore the experimental high-level interface

1.3.1 (2021-04-16)

  • Fix the recommended version

1.3.0 (2021-04-09)

  • ECC-1231: Remove the experimental high-level interface

  • Added the “findlibs” module

  • Fix tests/test_high_level_api.py when MEMFS enabled

  • ECC-1226: Python3 bindings: Typo causes AttributeError when calling codes_index_get_double

1.2.0 (2021-03-23)

  • Added test for multi-field GRIBs

  • Fix deprecation warning: np.float is a deprecated alias for the builtin float

  • Experimental feature: grib_nearest_find

1.1.0 (2021-01-20)

  • ECC-1171: Performance: Python bindings: remove assert statements

  • ECC-1161: Python3 bindings: Do not raise exception on first failed attempt

  • ECC-1176: Python3 bindings: float32 recognised as int instead of float

  • GitHub pull request #41: Remove the apparent support for Python 2

  • GitHub pull request #44: Fix CFFI crash on windows

  • GitHub pull request #42: Add unit testing with GitHub actions (linux, macos and windows)

1.0.0 (2020-10-14)

  • ECC-1143: CMake: Migration to ecbuild v3.4

  • ECC-1133: C API: Propagate const char* for codes_index_new_from_file and codes_index_select_string

0.9.9 (2020-08-04)

  • Support for ecmwflibs. An additional way to find ECMWF libraries (if available)

  • ECC-1140: Segfault from invalid pointer reference in grib_set_double_array()

0.9.8 (2020-06-26)

  • ECC-1110: Removed obsolete function codes_close_file()

  • Provide missing argument to exceptions

  • Fix codes_set_definitions_path() typo

  • Fix grib_get_double_element(). Missing last argument

  • Add more tests to increase coverage

  • GitHub pull request #15: Add .__next__() method to eccodes.CodesFile class

  • ECC-1113: Python3 bindings under Windows: codes_get_long_array returns incorrect values

  • ECC-1108: Python3 bindings under Windows: use of handle causes crash

  • ECC-1121: Segfault when closing GribFile if messages are closed manually

0.9.6 (2020-03-10)

  • Update Copyright notices

  • Function-argument type checks: Improve error message

  • Fix C function calls for codes_gribex_mode_on/codes_gribex_mode_off

0.9.5 (2020-01-15)

  • ECC-1029: Function-argument type-checking should be disabled by default.

    To enable these checks, export ECCODES_PYTHON_ENABLE_TYPE_CHECKS=1

  • ECC-1032: Added codes_samples_path() and codes_definition_path()

  • ECC-1042: Python3 interface writes integer arrays incorrectly

  • ECC-794: Python3 interface: Expose the grib_get_data function

0.9.4 (2019-11-27)

  • Added new function: codes_get_version_info

  • ECC-753: Expose the codes_grib_nearest_find_multiple function in Python

  • ECC-1007: Python3 interface for eccodes cannot write large arrays

0.9.3 (2019-10-04)

  • New exception added: FunctionalityNotEnabledError

  • BUFR decoding: support for multi-element constant arrays (ECC-428)

0.9.2 (2019-07-09)

  • All ecCodes tests now pass

  • Simplify the xx_new_from_file calls

  • Fix for grib_set_string_array

  • Use ECCODES_DIR to locate the library

  • Remove the new-style high-level interface. It is still available in cfgrib.

0.9.1 (2019-06-06)

  • codes_get_long_array and codes_get_double_array now return a np.ndarray. See: #3.

0.9.0 (2019-05-07)

  • Declare the project as Beta.

0.8.0 (2019-04-08)

  • First public release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eccodes-2.38.0.tar.gz (2.3 MB view details)

Uploaded Source

Built Distributions

eccodes-2.38.0-py3-none-any.whl (43.1 kB view details)

Uploaded Python 3

eccodes-2.38.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

eccodes-2.38.0-cp312-cp312-macosx_13_0_x86_64.whl (6.4 MB view details)

Uploaded CPython 3.12 macOS 13.0+ x86-64

eccodes-2.38.0-cp312-cp312-macosx_13_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.12 macOS 13.0+ ARM64

eccodes-2.38.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

eccodes-2.38.0-cp311-cp311-macosx_13_0_x86_64.whl (6.4 MB view details)

Uploaded CPython 3.11 macOS 13.0+ x86-64

eccodes-2.38.0-cp311-cp311-macosx_13_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.11 macOS 13.0+ ARM64

eccodes-2.38.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

eccodes-2.38.0-cp310-cp310-macosx_13_0_x86_64.whl (6.4 MB view details)

Uploaded CPython 3.10 macOS 13.0+ x86-64

eccodes-2.38.0-cp310-cp310-macosx_13_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.10 macOS 13.0+ ARM64

eccodes-2.38.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

eccodes-2.38.0-cp39-cp39-macosx_13_0_x86_64.whl (6.4 MB view details)

Uploaded CPython 3.9 macOS 13.0+ x86-64

eccodes-2.38.0-cp39-cp39-macosx_13_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.9 macOS 13.0+ ARM64

eccodes-2.38.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

File details

Details for the file eccodes-2.38.0.tar.gz.

File metadata

  • Download URL: eccodes-2.38.0.tar.gz
  • Upload date:
  • Size: 2.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for eccodes-2.38.0.tar.gz
Algorithm Hash digest
SHA256 10633942621887a3f695653cad0aaa79f0e9697a51431dd8ba42b716f651fa76
MD5 68a31f7f67805de28a8fb56a9afa23e3
BLAKE2b-256 855d9b69c2e2889d756c05d7b2a366e5f21ad216c6dcaafeebadeaf769c16d70

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-py3-none-any.whl.

File metadata

  • Download URL: eccodes-2.38.0-py3-none-any.whl
  • Upload date:
  • Size: 43.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for eccodes-2.38.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c98baeffe24691429c894a0b6a25c4b0a3916efbaad53678da306338634c3a72
MD5 74a9fd28fca7b01b647c0004aca459e5
BLAKE2b-256 bbde2e8664e7ee2fa9afe8f0ef06a684bfdadf9e776975aa89a68bf5d65fd7c8

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eccodes-2.38.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e521c978f725de7523d2315f1ae04eca8637edc5e11df65f3a1e644a93c3f4c8
MD5 70afec78f1fa3781b951c700babb1b62
BLAKE2b-256 d2cd6c57eca5e50cc51d8e13abb61e492f64e5dc6bbf54c54fe1e7340d18fd76

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for eccodes-2.38.0-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 f5a1c1adbe84beadd7a97b71308247d1fe6a52e649461ac2cc815274d37a5ed9
MD5 04df5163f69f826d022045a5df6b8e56
BLAKE2b-256 72f707e6d05d775a6eb43ac53c80e5ca94e018d35a35075ab5cd693d4fc7cf99

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-cp312-cp312-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for eccodes-2.38.0-cp312-cp312-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 769e10b3f13744265e892bb015f08659b1e41125fa0a4ce9256f7b8df3a50de2
MD5 a35bb53b6ea241dbb5b5f416c039914e
BLAKE2b-256 ebd545b5842c0910073d2797a1f5b6d09c28426363fb9eebed164fffbcc10b8c

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eccodes-2.38.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 929215e0664e5f801400f6a3c9222139a53d000fabf3a22184af6c10cb8ed55c
MD5 e4025015c5b3236644f657bb438d8dba
BLAKE2b-256 9ab556c1c0fea9ef31055af7a3a1973c82b31837c4e65c55d931c9adbbfcd953

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for eccodes-2.38.0-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 3616814b43971a38e6055d0eeb4901f14c850a79a2e8c56108070a23eca6383f
MD5 dfc99e2747881de6061b7a6f7ce8ba8f
BLAKE2b-256 ed97e6ca8fb79b7cec5526707860a596a332f065b4d81a5df1bed54fe67964ab

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-cp311-cp311-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for eccodes-2.38.0-cp311-cp311-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 bbd1c1b73ecfb0cd326e9beb427e0a17a16968efa3f800caba2a0c2bbf69c445
MD5 8ab4bb8677929d1aa8dd330fcf10cf90
BLAKE2b-256 d029d49082d1a3439e20601199a5b4e0ad7377d2d238cfe04a2422eb32cb7325

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eccodes-2.38.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9407224edc95e523d97ba7124c1ea669a33a61f30c980111f33c4e5be646b84b
MD5 ff8dd7545aece523f7fb30795e24e9b8
BLAKE2b-256 fbe224d3bb58d8e12a11c570d3dacba26f38ab19c906a65064b71c1d213eb66d

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for eccodes-2.38.0-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 006de61d7c0a2a31c3a8855a7cb12fe057c93832c744107e5b4b1ae225ece080
MD5 2ece2f6b30b93176d9861777832a7004
BLAKE2b-256 df058fa1251a32d46a49ae21a847526c8066090034116139bffca58abed27150

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-cp310-cp310-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for eccodes-2.38.0-cp310-cp310-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 e2c25a0f0219be3842f1ae6da41e1faf4d74ee53af86c711717a0d70d76aa985
MD5 6f31d8ea87146efec57a8c8bde34d9fa
BLAKE2b-256 f9138c7c24bab356a99f541acda1554062e769f58b977bd0644423afcb6bd9fa

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eccodes-2.38.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b3c20dbe6bac78f6e8fa26c5e8e1bbb6b0aa71a0cc8893a0ba577ac635b4a059
MD5 0ad27904166f02f3c10ea87818fc1e4b
BLAKE2b-256 9507d62f0ad3ecd9dff44c19cf136815c71f96b6edae9f52b67a9aba9d30b165

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-cp39-cp39-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for eccodes-2.38.0-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 3a1265c44526ebf2083ed6ad793cee3ebc0f7bada322d40e583987dd6d02b0c5
MD5 d7ce7d12f9216828d6f5c4dfb5db5387
BLAKE2b-256 02cc24e30cfb57be94fc1aaaa4553cfd985deca73ebdc0c8b18058f3fd029e6c

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-cp39-cp39-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for eccodes-2.38.0-cp39-cp39-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 ff7cffa95fa94f19d584ce1509376341e1241f25e357da91fbbadbc01339471a
MD5 fb5a145e38395d28f13bfd7db0403fea
BLAKE2b-256 676937636e226528397aa7619377db57f6ccf89c98ddba83ca0493a3c58e90f2

See more details on using hashes here.

File details

Details for the file eccodes-2.38.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eccodes-2.38.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3b01b86356a5fcb8ee8563f5fd532ca6652f892d307dce726c67f5cdd199935a
MD5 1d21c2609378270259f3fcf5c67a6535
BLAKE2b-256 4f418a5a0a8781d285936ccca133cd3bea4e1543b2c8a05e8213057ae0b7fc13

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page