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.1 (2024-09-26)

  • ECC-1923: ecCodes binary wheel can affect floating-point computations in 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.1.tar.gz (2.3 MB view details)

Uploaded Source

Built Distributions

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

Uploaded Python 3

eccodes-2.38.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.0 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

eccodes-2.38.1-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.1-cp312-cp312-macosx_13_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.12 macOS 13.0+ ARM64

eccodes-2.38.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.0 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

eccodes-2.38.1-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.1-cp311-cp311-macosx_13_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.11 macOS 13.0+ ARM64

eccodes-2.38.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.0 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

eccodes-2.38.1-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.1-cp310-cp310-macosx_13_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.10 macOS 13.0+ ARM64

eccodes-2.38.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.0 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

eccodes-2.38.1-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.1-cp39-cp39-macosx_13_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.9 macOS 13.0+ ARM64

eccodes-2.38.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.0 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

File details

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

File metadata

  • Download URL: eccodes-2.38.1.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.1.tar.gz
Algorithm Hash digest
SHA256 90a76a0e26b1a0bae299c15bf7b0bfd885f07ab717a9a738ac81493a11c240c6
MD5 aea72b8fbd1d4c356d1f466bafda2f95
BLAKE2b-256 a98f1d96697778aaf06ece2e2dd08e43527e4d5ec554c9cfd20d834353107cef

See more details on using hashes here.

File details

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

File metadata

  • Download URL: eccodes-2.38.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8ee57a1e3c73d01d1a436e0b63c40b3bf4b68566a971c824f84aacb5b9b8cce8
MD5 a584203cf92bc23f0f97d6e54a6c25f3
BLAKE2b-256 5997f6463629500be2d3680391ab0d1a11bd6379e6e267c44a526d19f93dfd3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fc44671fc8d311013d1ab73f712f2a1c945c7b78ebe144b9ad6be6e741cb5932
MD5 292206d23f1a21cc3a79c666b63ffa47
BLAKE2b-256 f6f43c9c6ac965fb40d40dcc6ae9090864cbfad30b18909a1ac314fe28be0b58

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.1-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 10f260fc49805bfad6db27ba69e386f524296cde6512dd9e5c8dc2d5b5eca67a
MD5 dc8b25feaf94b8c175f5556a7c2b8981
BLAKE2b-256 76829a08f0d607375f3b2167b0da30268e90d0a66bf2c3492d7cae1553e82ce9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.1-cp312-cp312-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 2c54fb5712b4b864d9e300797ee1c139feaf733c0fb937b8e8da8555c7256667
MD5 48fd14ce71e06298f4219aeb52dde5ea
BLAKE2b-256 af3fe97f7c7427ae14bbee5cfc5001e64b44d7e0c2e05de7ea8e0aedf895166f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e3c6e52cf120a7cce274c3c1463fe79cc0c26ec5446b539fa650cfa815845deb
MD5 56a2a0a6c83b52db84711ec2f5d95ea8
BLAKE2b-256 28062d0712da23291875cdc6faba2dadb21bd5a032f1bf557b51c5f323f9b8e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.1-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 a0391e72557a4f2b6131e075d687882ae7acc02fbebbefc8ec1805f20ec258e8
MD5 f352242dd0b2327fc4a833414f138cb9
BLAKE2b-256 c2513473e6af0e1191cf6814c96b223776b3f2d5c997275417fde1a45f0dd238

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.1-cp311-cp311-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 c284f23f2e60a6b3d1250bd2f2555947e16a6c91d6cdb7136d34d2dc9ee67e0b
MD5 6f310caccf29c4639313d726c215a041
BLAKE2b-256 ee3134bd3417e2caa4faf0b663523b43cc992fecec2d9bbf3a6aeef09a56669e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7e72cbe8460976368ea629bc8fb00b20db26c943e2428b7eb534ab3521f63046
MD5 26de0afbf1d23e85c91f858d073521e6
BLAKE2b-256 72ee55dc9ebf7e7a1514c416cf9a9f5483b51a3b282346d6954bb10766a82b81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.1-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 3e55bf2a7b08dd0146921be460439b9d2c95b791a261a0d1c25d979a58c33515
MD5 761ab62dd1cbca4fea010a4a4eddcf9f
BLAKE2b-256 c3ddd44375a4ded8e11211a93a5b25f29442d7d076b29e70096ecdacbd561ad6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.1-cp310-cp310-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 3b510f26c5c405d936eab8443c953023647deb5dd5c7d034cac9f6f7c13bdbaa
MD5 83449e2a480cf70734e48fcba3216bad
BLAKE2b-256 552aa33b5da35f57391315e153f6647d9384e517bb011bb817449d7748d94579

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f7a2a44b5758054de934de275ec71b6c83c59281b83d1da57d913b6705ee0d3b
MD5 603c19ecb20352b55ae6af0dd5e8731d
BLAKE2b-256 5acbbdaffe6fa8c9879aafb53b0f76db4063e20176a0ff7a9447d1317b4b719e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.1-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 31ec8bd5c2a716d0ca93d4a7dd02942ecee2582a97c92603f85358ff7da3aa42
MD5 1ec438d86554aeff2e2301855e4a1829
BLAKE2b-256 58e64e1a48d52fc30ff35d118342592e4265ad630fa6af34d9c634a997150efe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.1-cp39-cp39-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 582aae37c6b80a96f26fb94fc42906151d5f370414b468efe3d8e3fceeba75f0
MD5 738376ac184b12fb14a9c944467ea158
BLAKE2b-256 8cfee2b786cec651a49206ddefda250356a3cb857c9806ebf2cc9b0874d19c0d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cbdc65001d2a60925cb074ed49d14d52fbe89862ac39d5628aafc553f84c3c10
MD5 02ff7a2dea89c3c291daab1cdd3ce68b
BLAKE2b-256 d5dac5b2493016b31e0dd44d9a46d725e0865f05055adb1bb0de2cf3e4e0b0c4

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