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.org/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.3 (2024-10-17)

  • Update version to be the same as the ecCodes library

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.3.tar.gz (2.3 MB view details)

Uploaded Source

Built Distributions

eccodes-2.38.3-py3-none-any.whl (43.2 kB view details)

Uploaded Python 3

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

Uploaded CPython 3.12 macOS 13.0+ ARM64

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

Uploaded CPython 3.11 macOS 13.0+ ARM64

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

Uploaded CPython 3.10 macOS 13.0+ ARM64

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

Uploaded CPython 3.9 macOS 13.0+ ARM64

eccodes-2.38.3-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.3.tar.gz.

File metadata

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

File hashes

Hashes for eccodes-2.38.3.tar.gz
Algorithm Hash digest
SHA256 8dc76ab217199761dd6f93aee65eadf3a1e9f5760fee488f9f0643463ee8bc78
MD5 32cf460ec049f85dc4a5b62032f16464
BLAKE2b-256 38201228499507b9e08eae0604cc9ec5598a84a873aeaebeb4855710eb81c771

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for eccodes-2.38.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8d16b89c4b48dc236fd409ab799b68f90b01c3caa1607f60233093e6daa2bda2
MD5 670dff4b415e79cee848b6f237628616
BLAKE2b-256 9b9441ce15beed7200da9c2f6655e17f14800a182cef927d607c4f91acf1d010

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0ac9fdc46c9db4985b8c4fec7b15f00647bc37cd816019261c312609e2f992c2
MD5 656b31399a21387c77e55b68634ec8e8
BLAKE2b-256 a271f67183f1199a0ae7d0cee8a9884a89d130987399410dbf8a0936c6e1297c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.3-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 29bd280878840c5b21a90cd7495c441564f6ea59c7fd19e61307188417281f61
MD5 1669a9770afbafa786d85a51fb51966f
BLAKE2b-256 c7959ffcc7720b1b8628b71866c6fb4adc6ded2491435fda2d6e2adf0421d8dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.3-cp312-cp312-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 ab4945fb235eead908db7d8107ebc711010d760c3aeb74ced457b79275a3d23e
MD5 3fa1914e7f3b390ad37bb75aa9956d9e
BLAKE2b-256 12bb6d0e186775c8126fedf8d392a981e42ac922277b3a4cac7ae568e87368d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b8d2bf88622b853d7dc8abbbd486c5b1e2958764fb1f19e7b5caee7f2d81b800
MD5 1cfb5f58adc24713305953366bc17c8b
BLAKE2b-256 67c1e59bc6b4685917ea94a55b0faf7f4da66ef226868b5d810dc8c8e05a8adb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.3-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 9f4da4266e4a92835832927f7ca7082ef28ca817aa29d63d8880095fb5ec50d4
MD5 f86977c339a2ec51d8528e1c144fe1d5
BLAKE2b-256 5c53f5079d85b44230acf25ae77dca70df3d3489e97f089816b400c8ab4f0d0a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.3-cp311-cp311-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 0e476b6c8d5326b39fb6b0a3bdbb4842162c674ae0753db03ad6b015383a1ad1
MD5 8d8c16d7a4a73e29771d270e29f4e996
BLAKE2b-256 2c44a127df6a4a88719e53c18974eedae656efe56f138a78cf5ca04db7eb057e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ef46bcf3664fd738867fedd687c615e698867bb83f2a59fb4b163d3dc8fb0501
MD5 ecf9266db8893a14a68703a78cee409c
BLAKE2b-256 6f88fb8452d8e7677dc05e79b9b7b39ac381a8f8bf5c897f273a730609ea9778

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.3-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 170232a6a86d9871b8b4be39883586941e2a3082b679f06543924349f7444170
MD5 dfae6d0e805737972a4948e0604a2fec
BLAKE2b-256 75eea8ab91efcf564c25b325efbe73f8b247e2cac0627e24e000f5b009ee18db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.3-cp310-cp310-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 101759a317a7af725cffb2d83d608451fe436ab1aed7170b117cbe14086997c4
MD5 dc9250e7a92f9b66edd4826051d06f33
BLAKE2b-256 88b2c5f238f63942634177c2e209b64800372b81a5b76eb66131f9062f5e6242

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 702306ee7ab12cfc67d8c54501fc44dbe3cc5577a0c560d7f586eb77f923ed2c
MD5 e91484f36bc4deedf8789e4aa28b842c
BLAKE2b-256 a0846914fcc305a037396267cfbdcfe2d78b77dd780c59a1222811d9948ca27e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.3-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 cd7bd04ba8caea8e251c8859ceedc99851687fcc91d622765eaf480183768baf
MD5 532c042418dc9815d0e1641ac9008992
BLAKE2b-256 669a0f972dcfe848f7361e67f93d4c1d90756558d6f44bf9ac8d952a5b722593

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.3-cp39-cp39-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 277b3a7204a1126d672bfe81901afb23a7ab725a5ef311bb15d8c8dcf983675e
MD5 c93a7a89724b28709366d3a379f82e71
BLAKE2b-256 a729d594cc4b141cfb7048d7de5d76bd48d84104b5b37074bd3d6605f80358e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eccodes-2.38.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d75eb42f1ba19ecac6b617d23882ee4ba325228b68b60ec0f202776aae85380d
MD5 676a687f93748d0430ebed8222c11f95
BLAKE2b-256 6347b50e88e5048f95025c22f2d83740d88f50009d7b59705ccf1ea98b12a071

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