pyosmium
提供 Libosmium C++ 库的 Python 绑定,该库用于以快速且灵活的方式处理 OpenStreetMap 数据。
安装
Pyosmium 支持 Python >= 3.8。已知 Pypy 无法正常工作。对 free-threading Python 的支持目前仍处于实验阶段。
在 32 位架构上编译和使用 pyosmium 仍然可行,但 不再获得官方支持。在 32 位系统上处理大型 OSM ID 存在已知问题。
使用 Pip
安装 pyosmium 的推荐方式是通过 pip:
pip install osmium
我们为所有积极维护的 Python 版本提供 Linux、MacOS 和 Windows 64 位架构的二进制 wheel。
对于其他版本,提供源码 wheel。请确保先安装所有 外部依赖项。在 Debian/Ubuntu 类系统上,以下 命令可安装所有必需的包:
sudo apt-get install build-essential cmake libexpat1-dev zlib1g-dev libbz2-dev
从源码安装
先决条件
pyosmium 具有以下依赖项:
- libosmium >= 2.16.0 (2.21.0 到 2.23.0 版本在处理提取差异时存在已知问题)
- protozero
- cmake
- Pybind11 >= 2.7
- expat
- libz
- libbz2
- Python Requests
- scikit-build-core
- 兼容 C++17 的编译器(支持 Clang 13+、GCC 10+)
从源码编译
请确保安装 expat、libz 和 libbz2 的开发包。
构建源码包时,Libosmium 和 Protozero 的相应版本将被下载到
contrib 目录中:
python3 -m build -s
或者,通过设置
Libosmium_ROOT 和 Protozero_ROOT 来为这些库提供自定义位置。
要编译并安装绑定,请运行
pip install .
用于开发的编译
在开发过程中进行编译时,您可以使用实验性的 可编辑安装模式 scikit-build-core:
创建一个预装了 scikit-build-core 和 pybind11 的虚拟环境:
virtualenv /tmp/dev-venv
/tmp/dev-venv/bin/pip install scikit-build-core pybind11
现在使用以下命令编译 pyosmium:
/tmp/dev-venv/bin/pip --no-build-isolation --config-settings=editable.rebuild=true -Cbuild-dir=/tmp/build -ve.
示例
example 目录包含有关如何使用该库的小型示例。
它们大多是 Libosmium 和 osmium-contrib 中示例的移植版本。
测试
test 目录中有一个小型测试套件。这为 Python 绑定提供了单元测试, 它并非旨在作为 Libosmium 的测试套件。
测试需要 pytest 和 pytest-httpserver,以及可选的
pytest-run-parallel 和 shapely。将它们安装到您的开发环境中:
/tmp/dev-venv/bin/pip install --no-build-isolation --config-settings=editable.rebuild=true -Cbuild-dir=build -ve.[tests]
可以使用以下命令运行测试套件:
/tmp/dev-venv/bin/pytest test
要测试在 free-threaded Python 上的并行执行,请运行:
/tmp/dev-venv/bin/pytest test --parallel-threads 10 --iterations 100
文档
要构建文档,你需要 mkdocs 以及 mkdocstrings 和 jupyter 扩展 还有 material 主题。
所有必要的包都可以通过 pip 安装:
pip install osmium[docs]
要构建文档,请运行:
mkdocs build
或者要在本地预览,你可以使用:
mkdocs serve
工具的预生成 man 页面位于 docs/man。要重新构建
man 页面,请运行:
cd docs
make man
错误与问题
如果你发现错误或有任何功能请求,请在 github 问题跟踪器 中报告。
关于使用 pyosmium 的一般问题,你可以使用 OSM 开发邮件列表 或在 OSM 帮助 上提问。
许可证
Pyosmium 在 BSD 2-Clause 许可证下提供。参见 LICENSE.TXT。
作者
Sarah Hoffmann (lonvia@denofr.de) 和其他人。完整的 列表请参见提交日志。