跳转到主要内容

Python接口到ecCodes GRIB和BUFR解码器/编码器

项目描述

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

Python 3接口,通过ECMWF ecCodes库解码和编码GRIB和BUFR文件。

功能

  • 读取和写入GRIB 1和2文件,

  • 读取和写入BUFR 3和4文件,

  • 支持所有现代版本的Python和PyPy3,

  • 在大多数Linux发行版和MacOS上运行,ecCodes C库是唯一的系统依赖。

  • PyPI包可以不进行编译安装,但速度比原始的ecCodes模块慢两倍。

  • 可选的编译步骤可以使代码速度与原始模块一样快,但需要推荐(最新)版本的ecCodes

限制

  • Microsoft Windows支持尚未测试。

安装

从版本2.37.0开始,ecCodes Python绑定还提供了ecCodes二进制库,并遵循ecCodes二进制库的版本号。下面将详细介绍。

可以使用以下方式从PyPI安装此包

$ pip install eccodes

默认情况下,此安装将包含ecCodes二进制库(自版本2.37.0起),这意味着不需要外部ecCodes二进制库。如果您想使用外部ecCodes二进制库,在导入eccodes之前设置以下环境变量

$ export ECCODES_PYTHON_USE_FINDLIBS=1

如果设置了此变量,ecCodes的Python绑定将使用findlibs包来定位二进制库(findlibs是2.37.0版本之前使用的唯一机制)。

为了了解二进制库的搜索过程,在导入eccodes之前设置以下环境变量

$ export ECCODES_PYTHON_TRACE_LIB_SEARCH=1

您还可以安装一个不包含二进制库的ecCodes Python接口版本,在这种情况下,将像以前一样使用findlibs机制

$ pip install eccodes --no-binary eccodes

系统依赖性

Python模块依赖于ECMWF的ecCodes库。从版本2.37.0开始,该库与Python模块一起提供。如果您想安装和使用单独的二进制库(见上文),它必须在系统上安装,并作为共享库可用。

在MacOS上使用HomeBrew

$ brew install eccodes

或者如果您使用Conda管理二进制包

$ conda install -c conda-forge eccodes

作为替代方案,您可以按照以下https://confluence.ecmwf.int/display/ECC/ecCodes+installation中的说明安装官方源分发版

您可以通过运行简单的selfcheck命令来确保系统设置正确

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

用法

有关用法,请参阅ecCodes文档页面

实验特性

快速绑定

要测试更快的CFFI API级别,出线模式,您需要ecCodes头文件。然后您需要将仓库克隆到与ecCodes源树相同的文件夹中,进行pip开发安装,并自定义编译二进制绑定

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

要恢复到ABI级别,内联模式,只需删除编译后的绑定

$ rm gribapi/_bindings.*

项目资源

开发

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

下载

https://pypi.ac.cn/project/eccodes

贡献

主仓库托管在GitHub上,测试、错误报告和贡献受到高度欢迎和赞赏

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

请参阅CONTRIBUTING.rst文档以获取最佳帮助方式。

维护者

贡献者

请参阅参与此项目的贡献者列表

许可协议

© 版权所有 2017- ECMWF。

此软件根据Apache许可证版本2.0许可,可在https://apache.ac.cn/licenses/LICENSE-2.0获得。

在应用此许可证时,ECMWF不会放弃因其作为政府间组织而享有的特权和豁免权,也不会服从任何司法管辖权。

eccodes-python的变更日志

2.38.1 (2024-09-26)

  • ECC-1923: ecCodes二进制轮次可能影响Python中的浮点计算

2.38.0 (2024-09-25)

  • ECC-1790: 添加 codes_get_offset

  • ECC-1899: 允许设置调试级别的 API 函数

  • 查询库功能的函数

2.37.0 (2024-09-09)

  • 将 ecCodes 二进制库捆绑到 PyPi 发行版中,适用于 Linux 和 MacOS

1.7.1 (2024-06-19)

  • np.Infinity 在 NumPy 2.0 版本中已被移除

1.7.0 (2024-02-26)

  • ECC-1761: 添加提取消息偏移量和大小的函数

  • ECC-1742: 添加仅克隆消息元数据的函数

1.6.1 (2023-10-02)

  • ECC-1693: 更新最低推荐版本

  • 修复 flake8 警告 E721

1.6.0 (2023-07-11)

  • ECC-1630: 将 API 版本作为整数获取

  • ECC-1622: 删除 Python 3.7 版本

  • ECC-1601: GRIB: 支持单精度解码的数据值数组

  • ECC-1611: 添加确定 BUFR 键是否为坐标描述符的函数

1.5.2 (2023-04-04)

  • 添加对 Python 3.10 和 3.11 版本的支持

  • ECC-1555: 错误处理 2D numpy 数组

  • ECC-1539: 使用 'warnings' 库进行自检

  • ECC-1538: 添加对 CODES_TYPE_BYTES 的支持

  • ECC-1524: 在 High-level Message.set 函数中检查值应根据值类型检索

  • ECC-1527: 处理 High-level Message.set 函数检查值中的浮点数

1.5.1 (2023-01-25)

  • ECC-1446: 数据文件 era5-levels-members.grib 未包含在发布的 tar 文件中

  • ECC-1460: 在 M1 MacBook Pro 上无法导入 eccodes

  • ECC-1505: High-level Message.set 函数应允许字典并检查结果

1.5.0 (2022-08-25)

  • ECC-1404: 添加 grib_get_gaussian_latitudes() 函数

  • ECC-1405: 添加新函数:codes_any_new_from_samples

  • ECC-1415: 实现更高层的 Python 接口(仍为实验性)

  • ECC-1429: 删除文件 'eccodes/messages.py'

  • GitHub pull request #62: 添加 pypi 徽标

1.4.2 (2022-05-20)

  • ECC-1389: 删除 Python 3.5 和 3.6 版本

  • ECC-1390: NameError: 'GribInternalError' 未定义

  • 添加对 GRIB 位图的测试

1.4.1 (2022-03-03)

  • ECC-1351: 在 codes_set() 和 codes_set_long() 中支持 numpy.int64

  • ECC-1317: 数据文件 tiggelam_cnmc_sfc.grib2 未包含在发布的 tar 文件中

1.4.0 (2021-12-03)

  • ECC-1234: 删除实验性高级接口

  • ECC-1282: 添加 codes_dump()

1.3.4 (2021-08-27)

  • 更新文档

1.3.3 (2021-06-21)

  • ECC-1246: 解析 BUFR 文件时出现 UnicodeDecodeError

1.3.2 (2021-04-16)

  • 恢复实验性高级接口

1.3.1 (2021-04-16)

  • 修复推荐版本

1.3.0 (2021-04-09)

  • ECC-1231: 删除实验性高级接口

  • 添加了 "findlibs" 模块

  • 修复 MEMFS 启用时 tests/test_high_level_api.py 的测试

  • ECC-1226: Python3 绑定:打字错误导致调用 codes_index_get_double 时出现 AttributeError

1.2.0 (2021-03-23)

  • 添加了对多字段 GRIB 的测试

  • 修复弃用警告:np.float 是内建 float 的弃用别名

  • 实验性功能:grib_nearest_find

1.1.0 (2021-01-20)

  • ECC-1171: 性能:Python 绑定:删除 assert 语句

  • ECC-1161: Python3 绑定:不要在第一次失败尝试时引发异常

  • ECC-1176: Python3 绑定:float32 被识别为 int 而不是 float

  • GitHub pull request #41: 删除对 Python 2 的明显支持

  • GitHub pull request #44: 修复 Windows 上的 CFFI 崩溃

  • GitHub pull request #42: 使用 GitHub actions 添加单元测试(Linux、macos 和 windows)

1.0.0 (2020-10-14)

  • ECC-1143: CMake:迁移到 ecbuild v3.4

  • ECC-1133: C API:为 codes_index_new_from_file 和 codes_index_select_string 传播 const char*

0.9.9 (2020-08-04)

  • 支持 ecmwflibs。寻找 ECMWF 库的另一种方法(如果可用)

  • ECC-1140:在 grib_set_double_array() 中从无效指针引用导致的段错误

0.9.8 (2020-06-26)

  • ECC-1110:已移除过时的函数 codes_close_file()

  • 为异常提供缺失的参数

  • 修复 codes_set_definitions_path() 中的打字错误

  • 修复 grib_get_double_element()。缺少最后一个参数

  • 添加更多测试以提高覆盖率

  • GitHub pull request #15:向 eccodes.CodesFile 类添加 .__next__() 方法

  • ECC-1113:Windows 下的 Python3 绑定:codes_get_long_array 返回不正确的值

  • ECC-1108:Windows 下的 Python3 绑定:使用句柄导致崩溃

  • ECC-1121:如果手动关闭消息,则关闭 GribFile 时发生段错误

0.9.6 (2020-03-10)

  • 更新版权声明

  • 函数参数类型检查:改进错误信息

  • 修复 codes_gribex_mode_on/codes_gribex_mode_off 的 C 函数调用

0.9.5 (2020-01-15)

  • ECC-1029:默认情况下应禁用函数参数类型检查。

    要启用这些检查,请导出 ECCODES_PYTHON_ENABLE_TYPE_CHECKS=1

  • ECC-1032: 添加了 codes_samples_path() 和 codes_definition_path() 函数

  • ECC-1042: Python3 接口错误地写入整数数组

  • ECC-794: Python3 接口:公开 grib_get_data 函数

0.9.4 (2019-11-27)

  • 添加了新函数:codes_get_version_info

  • ECC-753: 在 Python 中公开 codes_grib_nearest_find_multiple 函数

  • ECC-1007: Python3 接口 eccodes 无法写入大数组

0.9.3 (2019-10-04)

  • 新增异常:FunctionalityNotEnabledError

  • BUFR 解码:支持多元素常量数组(ECC-428)

0.9.2 (2019-07-09)

  • 所有 ecCodes 测试现在均通过

  • 简化 xx_new_from_file 调用

  • 修复 grib_set_string_array

  • 使用 ECCODES_DIR 定位库

  • 移除新的高级接口。它仍在 cfgrib 中可用。

0.9.1 (2019-06-06)

  • codes_get_long_arraycodes_get_double_array 现在返回一个 np.ndarray。请参阅: #3

0.9.0 (2019-05-07)

  • 将项目声明为 Beta 版。

0.8.0 (2019-04-08)

  • 首次公开发布。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

eccodes-2.38.1.tar.gz (2.3 MB 查看哈希值)

上传时间: 源代码

构建的分发

eccodes-2.38.1-py3-none-any.whl (43.1 kB 查看哈希值)

上传时间: Python 3

eccodes-2.38.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.0 MB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ x86-64

eccodes-2.38.1-cp312-cp312-macosx_13_0_x86_64.whl (6.4 MB 查看哈希值)

上传时间: CPython 3.12 macOS 13.0+ x86-64

eccodes-2.38.1-cp312-cp312-macosx_13_0_arm64.whl (6.3 MB 查看哈希值)

上传时间: 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 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

eccodes-2.38.1-cp311-cp311-macosx_13_0_x86_64.whl (6.4 MB 查看哈希值)

上传于 CPython 3.11 macOS 13.0+ x86-64

eccodes-2.38.1-cp311-cp311-macosx_13_0_arm64.whl (6.3 MB 查看哈希值)

上传于 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 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

eccodes-2.38.1-cp310-cp310-macosx_13_0_x86_64.whl (6.4 MB 查看哈希值)

上传于 CPython 3.10 macOS 13.0+ x86-64

eccodes-2.38.1-cp310-cp310-macosx_13_0_arm64.whl (6.3 MB 查看哈希值)

上传于 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 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

eccodes-2.38.1-cp39-cp39-macosx_13_0_x86_64.whl (6.4 MB 查看哈希值)

上传于 CPython 3.9 macOS 13.0+ x86-64

eccodes-2.38.1-cp39-cp39-macosx_13_0_arm64.whl (6.3 MB 查看哈希值)

上传于 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 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64

由以下组织支持