跳转到主要内容

未提供项目描述

项目描述

Impuls

GitHub | 文档 | 问题追踪 | PyPI

Impuls是一个用于处理静态公共交通数据的框架。使用的内部模型非常接近GTFS。

处理的核心实体称为管道,它由多个执行实际处理工作的任务组成。

数据存储在sqlite3数据库中,有一个非常轻量级的包装器,用于将Impuls的内部模型映射到SQL和GTFS。

Impuls提供了第一类支持从外部来源拉取数据,使用其资源机制。在处理数据之前缓存资源,如果一些输入数据没有变化,则可以节省带宽,甚至可以停止处理以避免资源更改。

还提供了一个用于处理版本化或多文件来源的模块。它允许将离散版本提供的调度轻松且非常灵活地处理为单个连贯文件。

安装和编译

Impuls主要用Python编写,但该库性能关键部分是用zig编写的,并随共享库捆绑。要编译和安装库,请确保已安装zig,然后运行以下命令,最好在虚拟环境内运行

Impuls主要用Python编写,但该库性能关键部分是用zig编写的,并随共享库捆绑。要安装库,请运行以下命令,最好在虚拟环境内运行

pip install impuls

大多数平台都提供了预构建的二进制文件。要从源码构建,需要安装zig

LoadBusManMDB任务还需要安装mdbtools。这个软件包在大多数包管理器中可用。

示例

有关Impuls功能和更详细的教程,请参阅https://impuls.readthedocs.io/en/stable/example.html

examples目录包含4个示例配置,将来自四个来源的数据处理成GTFS文件。如果您想运行它们,请参考readme中的开发部分以正确设置环境。

克拉科夫

克拉科夫在https://gtfs.ztp.krakow.pl上提供了不错的GTFS文件。示例管道移除了不必要的、令人困惑的行程数据,并修复了几个用户界面字符串。

使用python -m examples.krakow trampython -m examples.krakow bus运行。生成的GTFS将分别保存在_workspace_krakow/krakow.tram.out.zip_workspace_krakow/krakow.bus.out.zip中。

PKP IC (PKP Intercity)

PKP Intercity在ftp://ftps.intercity.pl提供了一个CSV表格的行程安排。不幸的是,原始数据不可公开获取。需要通过在波兰MMTIS NAP提供的联系信息通过电子邮件联系PKP Intercity以获取凭证。

管道开始时通过手动创建机构,加载CSV数据,从https://github.com/MKuranowski/PLRailMap获取车站数据,调整一些用户界面数据(最重要的是提取由公交车运营的行程段)。

使用python -m examples.pkpic FTP_USERNAME FTP_PASSWORD运行。生成的GTFS将保存在_workspace_pkpic/pkpic.zip中。

拉多姆

MZDiK拉多姆在http://mzdik.pl/index.php?id=145提供了一个MDB数据库的行程安排。这是第一个使用多文件管道支持的示例,因为源文件以离散版本发布。

多文件管道由四个不同的部分组成

  • 一个中间提供者,确定相关的输入(“中间”)源
  • 一个中间任务工厂,返回将中间源加载到SQLite数据库所需的任务
  • 一个最终任务工厂,返回合并中间源后执行的任务
  • 任何额外的资源,由中间或最终任务所需

缓存甚至更加复杂 - 不仅输入源在运行间保持,而且运行中间管道产生的数据库也被保留。如果中间提供者请求的4个源中的3个已经处理过 - 中间管道将只为单个新文件运行,但最终(合并)管道将在所有4个源上运行。

拉多姆的中间提供者刮取上述网站以找到可用的数据库。

处理中间源的管道稍微复杂一些:它涉及加载MDB数据库,清理数据(删除虚拟站点,生成和清理日历)并从http://rkm.mzdik.radom.pl/获取站点位置。

最终管道简单地将合并后的数据集导出到GTFS中。

使用python -m examples.radom运行,生成的GTFS将保存在_workspace_radom/radom.zip中。

华沙

华沙是另一个需要多文件管道的城市。ZTM华沙在ftp://rozklady.ztm.waw.pl几乎每天都会发布不同的输入文件。输入数据集采用完全定制的文本格式,需要相当复杂的解析。更多详情请访问https://www.ztm.waw.pl/pliki-do-pobrania/dane-rozkladowe/(波兰语)。

中间提供者从上述FTP服务器中挑选出相关的文件。

中间数据流的处理从将文本文件导入数据库开始。这一步非常独特,因为它还美化了站名——由于名称字段中存在指示符(在交叉路口附近唯一标识一个站的两位数字代码),单独完成这项任务会比较困难。管道继续添加版本元数据,将火车站合并为单个的stops.txt条目(ZTM将铁路出发分离成虚拟站点),并进行属性美化(即trip_headsign和stop_lat,stop_lon——不是所有站点在输入文件中都有位置)。最后一步是清理数据库中未使用的实体。

最终的管道简单地将合并后的数据集再次导入为GTFS。

关于站点位置和美化站名的边缘案例的附加数据来自https://github.com/MKuranowski/WarsawGTFS/blob/master/data_curated/stop_names.json

使用python -m examples.warsaw运行,生成的GTFS将被创建在_workspace_warsaw/warsaw.zip

许可证

Impuls是在GNU GPL v3(或任何后续版本)下分发的。

© 版权所有 2022-2024 米科拉伊·库拉诺夫斯基

Impuls是自由软件:您可以在自由软件基金会发布的GNU通用公共许可证的条款下重新分发和/或修改它;许可证的第3版,或者(根据您的选择)任何后续版本。

Impuls是在希望它会很有用的前提下分发的,但没有任何保证;甚至没有关于其商业性或针对特定目的的适用性的暗示性保证。有关详细信息,请参阅GNU通用公共许可证。

您应该已随Impuls收到GNU通用公共许可证的副本。如果没有,请参阅https://gnu.ac.cn/licenses/

Impuls源代码和预构建的二进制文件包含sqlite3,它置于公共领域

开发

Impuls使用meson-python。项目的布局相当非正统,因为Impuls既不是纯Python模块,也不是一个标准的C/C++扩展项目。相反,Zig代码被编译成一个共享库,并将其与Python模块捆绑在一起。

Zig允许非常容易地进行交叉编译,而使用共享库允许单个wheel在多个Python版本和实现之间使用。

开发需要安装pythonzigmdbtools(通常这3个都会出现在您的包管理器存储库中)。在Linux上设置环境,运行

$ python -m venv --upgrade-deps .venv
$ . .venv/bin/activate
$ pip install -Ur requirements.dev.txt
$ pip install --no-build-isolation -Cbuild-dir=builddir --editable .
$ ln -s ../../builddir/libextern.so impuls/extern

在MacOS上,将共享库文件扩展名更改为.dylib。在Windows上,将共享库的扩展名更改为.dll

要运行Python测试,只需执行pytest。要运行Zig测试,运行meson test -C builddir

要运行示例,首先安装它们的依赖项(pip install -Ur requirements.examples.txt),然后执行示例模块,例如python -m examples.krakow

meson-python将在可编辑的Impuls安装被导入时自动重新编译Zig库;将环境变量MESONPY_EDITABLE_VERBOSE设置为1以查看构建详细信息的meson日志。

默认情况下,extern zig 库将以调试模式构建。要更改此设置,请运行 meson configure --buildtype=debugoptimized builddir(buildtype 也可以设置为 debugrelease)。要重新编译库,请运行 meson compile -C builddir

不幸的是,meson-python 需要在 meson.build 中列出所有 python 和 zig 源文件。Python 文件需要列出以便打包工作,而 zig 源文件需要列出以便构建后端能够正确检测是否需要重新编译 libextern。

构建 wheel 包

Zig 被选为构建 wheel 包,因为它具有出色的交叉编译支持。多亏了这一点,发布所有 wheel 包不需要像 cibuildwheel、虚拟机或任何容器这样的工具。只要安装了 Zig,所有 wheel 包都可以在该机器上构建。

在构建 wheel 包之前,在虚拟环境中安装一些额外的依赖项:pip install -U build wheel

要构建 wheel 包,只需运行 python build_wheels.py

查看 python build_wheels.py --help 以获取所有可用选项。要调试失败的构建,请运行 python build_wheels.py --verbose --jobs 1 FAILED_CONFIG_NAME

查看 build_wheels.py 中的配置 以获取可用配置。

要构建源代码发行版,请运行 python -m build -so dist

项目详情


下载文件

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

源代码发行版

impuls-1.1.2.tar.gz (4.6 MB 查看哈希值

上传时间

构建发行版

impuls-1.1.2-py3-none-win_arm64.whl (772.2 kB 查看哈希值

上传时间 Python 3 Windows ARM64

impuls-1.1.2-py3-none-win_amd64.whl (806.6 kB 查看哈希值

上传时间 Python 3 Windows x86-64

impuls-1.1.2-py3-none-musllinux_1_1_x86_64.whl (821.6 kB 查看哈希值

上传时间 Python 3 musllinux: musl 1.1+ x86-64

impuls-1.1.2-py3-none-musllinux_1_1_aarch64.whl (855.1 kB 查看哈希值

上传时间 Python 3 musllinux: musl 1.1+ ARM64

impuls-1.1.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (822.0 kB 查看哈希值

上传于 Python 3 manylinux: glibc 2.17+ x86-64

impuls-1.1.2-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (855.5 kB 查看哈希值)

上传于 Python 3 manylinux: glibc 2.17+ ARM64

impuls-1.1.2-py3-none-macosx_11_0_x86_64.whl (820.9 kB 查看哈希值)

上传于 Python 3 macOS 11.0+ x86-64

impuls-1.1.2-py3-none-macosx_11_0_arm64.whl (802.4 kB 查看哈希值)

上传于 Python 3 macOS 11.0+ ARM64

由以下赞助

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面