## Valhalla Python bindings
| [] | [] |
This folder contains the Python bindings to [Valhalla routing engine](https://github.com/valhalla/valhalla).
> [!NOTE]
> `pyvalhalla(-weekly)` packages are currently only published for:
> - `linux-x86_x64`
> - `win-amd64`
> - `macos-arm64`
On top of the (very) high-level Python bindings, we package some data-building Valhalla executables to ease the process of graph creation or run Valhalla as a service, see [below](#valhalla-executables-linux-x86_x64-only).
### Installation
We distribute all currently maintained CPython versions as **binary wheels** for Win64, MacOS (`arm64`) and Linux (`x86_64`) distributions with `glibc>=2.28`. We **do not** offer a source distribution on PyPI.
`pip install pyvalhalla` to install the most recent Valhalla **release**.
`pip install pyvalhalla-weekly` to install the weekly published Valhalla **master commit**.
### Usage
#### Bindings
Find a more extended notebook in `./examples`, e.g. how to [use the actor](https://github.com/valhalla/valhalla/blob/master/src/bindings/python/examples/actor_examples.ipynb).
Before using the Python bindings you need to have access to a routable Valhalla graph. Either install Valhalla from source and built the graph from OSM compatible data or use our [Valhalla docker image](https://github.com/valhalla/valhalla/docker/README.md) for a painless experience, e.g. this will build the routing graph for Andorra in `./custom_files`:
```shell
docker run --rm --name valhalla -p 8002:8002 -v $PWD/custom_files:/custom_files -e tile_urls=https://download.geofabrik.de/europe/andorra-latest.osm.pbf ghcr.io/valhalla/valhalla-scripted:latest
```
Once you have created a graph locally, you can use it like this:
```python
from valhalla import Actor, get_config, get_help
# generate configuration
config = get_config(tile_extract='./custom_files/valhalla_tiles.tar', verbose=True)
# print the help for specific config items (has the same structure as the output of get_config()
print(get_help()["service_limits"]["auto"]["max_distance"])
# instantiate Actor to load graph and call actions
actor = Actor(config)
route = actor.route({"locations": [...]})
```
#### Valhalla executables (**`linux-x86_x64` only**)
To access the C++ (native) executables, there are 2 options:
- (recommended) execute the module, e.g. `python -m valhalla valhalla_build_tiles -h`
- execute the Python wrapper scripts directly, e.g. `valhalla_build_tiles -h`
> [!NOTE]
> For the latter option to work, the Python environment's `bin/` folder has to be in the `$PATH`. Inside virtual environments, that's always the case.
Executing the scripts directly might also not work properly if there's a system-wide Valhalla installation, unless the Python environment's `bin/` folder has higher priority than system folders in `$PATH`. The module execution uses an explicit Python executable which should be preferred.
There are also some additional commands we added:
- `--help`: print the help for `python -m valhalla` explicitly
- `--quiet`: redirect `stdout` of the C++ executables to `/dev/null`; can be added **once** anywhere in the command, will not be forwarded to a C++ executable
- `print_bin_path`: simply prints the absolute path to the package-internal `bin/` directory where the C++ executables are; useful if the executables should be accessed directly in some script
To find out which Valhalla executables are currently included, run `python -m valhalla --help`. We limit the number of executables to control the wheel size. However, we're open to include any other executable if there's a good reason.
### Building from source
#### Linux
To package arch-dependent Linux bindings we use a `manylinux` fork, where we install all dependencies into the `manylinux_2_28` image, based on AlmaLinux 8. This is necessary to have a broad `glibc` compatibility with many semi-recent Linux distros.
Either pull the `manylinux` image, or build it locally for testing:
```shell
docker pull ghcr.io/valhalla/manylinux:2_28_valhalla_python
# or pull the image from ghcr.io
git clone https://github.com/valhalla/manylinux
cd manylinux
POLICY=manylinux_2_28 PLATFORM=x86_64 COMMIT_SHA=$(git rev-parse --verify HEAD) BUILDX_BUILDER=builder-docker-container ./build.sh
docker tag quay.io/pypa/manylinux_2_28_x86_64:$(git rev-parse --verify HEAD) ghcr.io/valhalla/manylinux:2_28_valhalla_python
```
Once built, start a container to actually build Valhalla using AlmaLinux 8:
```shell
cd valhalla
docker run -dt -v $PWD:/valhalla-py --name valhalla-py --workdir /valhalla-py ghcr.io/valhalla/manylinux:2_28_valhalla_python
docker exec -t valhalla-py /valhalla-py/src/bindings/python/scripts/build_manylinux.sh build_manylinux 3.13
```
This will also build & install `libvalhalla` before building the bindings. At this point there should be a `wheelhouse` folder with the fixed python wheel, ready to be installed or distributed to arbitrary python 3.12 installations.
### `cibuildwheel`
On our CI, this orchestrates the packaging of all `pyvalhalla` wheels for every supported, minor Python version and every platform. It can also be run locally (obviously only being able to build wheels for _your_ platform), e.g.
```shell
python -m pip install cibuildwheel
cibuildwheel --print-build-identifiers
cibuildwheel --only cp313-manylinux_x86_64
# for windows you'll have to set an env var to the vcpkg win root
VCPKG_ARCH_ROOT="build/vcpkg_installed/custom-x64-windows" cibuildwheel --only cp313-manylinux_x86_64
```
On Linux, this might download the [`manylinux` docker image](https://github.com/valhalla/manylinux/pkgs/container/manylinux). In the end, you'll find the wheel in `./wheelhouse`.
### Testing (**`linux-x86_x64` only**)
We have a small [test script](https://github.com/valhalla/valhalla/blob/master/src/bindings/python/test/test_pyvalhalla_package.sh) which makes sure that all the executables are working properly. If run locally for some reason, install a `pyvalhalla` wheel first. We run this in CI in a fresh Docker container with no dependencies installed, mostly to verify dynamic linking of the vendored dependencies.
Raw data
{
"_id": null,
"home_page": "https://github.com/valhalla/valhalla",
"name": "pyvalhalla-weekly",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9.0",
"maintainer_email": null,
"keywords": null,
"author": "Nils Nolde",
"author_email": "nilsnolde+pyvalhalla@proton.me",
"download_url": null,
"platform": null,
"description": "\n## Valhalla Python bindings\n\n| [] | [] |\n\nThis folder contains the Python bindings to [Valhalla routing engine](https://github.com/valhalla/valhalla).\n\n> [!NOTE]\n> `pyvalhalla(-weekly)` packages are currently only published for:\n> - `linux-x86_x64`\n> - `win-amd64`\n> - `macos-arm64`\n\nOn top of the (very) high-level Python bindings, we package some data-building Valhalla executables to ease the process of graph creation or run Valhalla as a service, see [below](#valhalla-executables-linux-x86_x64-only).\n\n### Installation\n\nWe distribute all currently maintained CPython versions as **binary wheels** for Win64, MacOS (`arm64`) and Linux (`x86_64`) distributions with `glibc>=2.28`. We **do not** offer a source distribution on PyPI.\n\n`pip install pyvalhalla` to install the most recent Valhalla **release**. \n`pip install pyvalhalla-weekly` to install the weekly published Valhalla **master commit**.\n\n### Usage\n\n#### Bindings\n\nFind a more extended notebook in `./examples`, e.g. how to [use the actor](https://github.com/valhalla/valhalla/blob/master/src/bindings/python/examples/actor_examples.ipynb).\n\nBefore using the Python bindings you need to have access to a routable Valhalla graph. Either install Valhalla from source and built the graph from OSM compatible data or use our [Valhalla docker image](https://github.com/valhalla/valhalla/docker/README.md) for a painless experience, e.g. this will build the routing graph for Andorra in `./custom_files`:\n\n```shell\ndocker run --rm --name valhalla -p 8002:8002 -v $PWD/custom_files:/custom_files -e tile_urls=https://download.geofabrik.de/europe/andorra-latest.osm.pbf ghcr.io/valhalla/valhalla-scripted:latest\n```\n\nOnce you have created a graph locally, you can use it like this:\n\n```python\nfrom valhalla import Actor, get_config, get_help\n\n# generate configuration\nconfig = get_config(tile_extract='./custom_files/valhalla_tiles.tar', verbose=True)\n\n# print the help for specific config items (has the same structure as the output of get_config()\nprint(get_help()[\"service_limits\"][\"auto\"][\"max_distance\"])\n\n# instantiate Actor to load graph and call actions\nactor = Actor(config)\nroute = actor.route({\"locations\": [...]})\n```\n\n#### Valhalla executables (**`linux-x86_x64` only**)\n\nTo access the C++ (native) executables, there are 2 options:\n\n- (recommended) execute the module, e.g. `python -m valhalla valhalla_build_tiles -h`\n- execute the Python wrapper scripts directly, e.g. `valhalla_build_tiles -h`\n\n> [!NOTE]\n> For the latter option to work, the Python environment's `bin/` folder has to be in the `$PATH`. Inside virtual environments, that's always the case.\n\nExecuting the scripts directly might also not work properly if there's a system-wide Valhalla installation, unless the Python environment's `bin/` folder has higher priority than system folders in `$PATH`. The module execution uses an explicit Python executable which should be preferred.\n\nThere are also some additional commands we added:\n\n- `--help`: print the help for `python -m valhalla` explicitly\n- `--quiet`: redirect `stdout` of the C++ executables to `/dev/null`; can be added **once** anywhere in the command, will not be forwarded to a C++ executable\n- `print_bin_path`: simply prints the absolute path to the package-internal `bin/` directory where the C++ executables are; useful if the executables should be accessed directly in some script\n\nTo find out which Valhalla executables are currently included, run `python -m valhalla --help`. We limit the number of executables to control the wheel size. However, we're open to include any other executable if there's a good reason.\n\n### Building from source\n\n#### Linux\n\nTo package arch-dependent Linux bindings we use a `manylinux` fork, where we install all dependencies into the `manylinux_2_28` image, based on AlmaLinux 8. This is necessary to have a broad `glibc` compatibility with many semi-recent Linux distros.\n\nEither pull the `manylinux` image, or build it locally for testing:\n\n```shell\ndocker pull ghcr.io/valhalla/manylinux:2_28_valhalla_python\n\n# or pull the image from ghcr.io\ngit clone https://github.com/valhalla/manylinux\ncd manylinux\nPOLICY=manylinux_2_28 PLATFORM=x86_64 COMMIT_SHA=$(git rev-parse --verify HEAD) BUILDX_BUILDER=builder-docker-container ./build.sh\ndocker tag quay.io/pypa/manylinux_2_28_x86_64:$(git rev-parse --verify HEAD) ghcr.io/valhalla/manylinux:2_28_valhalla_python\n```\n\nOnce built, start a container to actually build Valhalla using AlmaLinux 8:\n\n```shell\ncd valhalla\ndocker run -dt -v $PWD:/valhalla-py --name valhalla-py --workdir /valhalla-py ghcr.io/valhalla/manylinux:2_28_valhalla_python\ndocker exec -t valhalla-py /valhalla-py/src/bindings/python/scripts/build_manylinux.sh build_manylinux 3.13\n```\n\nThis will also build & install `libvalhalla` before building the bindings. At this point there should be a `wheelhouse` folder with the fixed python wheel, ready to be installed or distributed to arbitrary python 3.12 installations.\n\n### `cibuildwheel`\n\nOn our CI, this orchestrates the packaging of all `pyvalhalla` wheels for every supported, minor Python version and every platform. It can also be run locally (obviously only being able to build wheels for _your_ platform), e.g.\n\n```shell\npython -m pip install cibuildwheel\ncibuildwheel --print-build-identifiers\ncibuildwheel --only cp313-manylinux_x86_64\n\n# for windows you'll have to set an env var to the vcpkg win root\nVCPKG_ARCH_ROOT=\"build/vcpkg_installed/custom-x64-windows\" cibuildwheel --only cp313-manylinux_x86_64\n```\n\nOn Linux, this might download the [`manylinux` docker image](https://github.com/valhalla/manylinux/pkgs/container/manylinux). In the end, you'll find the wheel in `./wheelhouse`.\n\n### Testing (**`linux-x86_x64` only**)\n\nWe have a small [test script](https://github.com/valhalla/valhalla/blob/master/src/bindings/python/test/test_pyvalhalla_package.sh) which makes sure that all the executables are working properly. If run locally for some reason, install a `pyvalhalla` wheel first. We run this in CI in a fresh Docker container with no dependencies installed, mostly to verify dynamic linking of the vendored dependencies.\n",
"bugtrack_url": null,
"license": null,
"summary": "High-level bindings to the Valhalla C++ library",
"version": "3.5.1.post1.dev180",
"project_urls": {
"Homepage": "https://github.com/valhalla/valhalla"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "1af3a191783963170bce3ba87552c52f72fa63b166c459c4fab30cab2c939e90",
"md5": "39ed6f87b4d7337fe406498bcd9a8f45",
"sha256": "954bda701f0f55fa3de5310ecd1aaee1b06e51dc5be8f82b88c8fa75319a4016"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp310-cp310-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "39ed6f87b4d7337fe406498bcd9a8f45",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9.0",
"size": 70624730,
"upload_time": "2025-07-27T02:20:12",
"upload_time_iso_8601": "2025-07-27T02:20:12.901708Z",
"url": "https://files.pythonhosted.org/packages/1a/f3/a191783963170bce3ba87552c52f72fa63b166c459c4fab30cab2c939e90/pyvalhalla_weekly-3.5.1.post1.dev180-cp310-cp310-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "47722b9769ffc1bbb7caf529ca8bf25bbbe8470920e3db3762c0496f4cff379a",
"md5": "d86e0ba409ac596c544256f1a6212e34",
"sha256": "a6e1be462f694095a53b8a16c65afb5c2626c6df54f86f81aa6e332d80c50915"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp310-cp310-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "d86e0ba409ac596c544256f1a6212e34",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9.0",
"size": 85471399,
"upload_time": "2025-07-27T02:20:17",
"upload_time_iso_8601": "2025-07-27T02:20:17.695635Z",
"url": "https://files.pythonhosted.org/packages/47/72/2b9769ffc1bbb7caf529ca8bf25bbbe8470920e3db3762c0496f4cff379a/pyvalhalla_weekly-3.5.1.post1.dev180-cp310-cp310-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "027b56484c0a5dab42dc5b08c10b83706814247a171babf293891f36a1f76e2f",
"md5": "e67f7cedda6dee818265b0e48f9ca71a",
"sha256": "3a9d83b86c80a13fbf5e769ef3bb8e46afb05655c61ab0ac58ef64d5e2b9b18d"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "e67f7cedda6dee818265b0e48f9ca71a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9.0",
"size": 27385211,
"upload_time": "2025-07-27T02:20:21",
"upload_time_iso_8601": "2025-07-27T02:20:21.606151Z",
"url": "https://files.pythonhosted.org/packages/02/7b/56484c0a5dab42dc5b08c10b83706814247a171babf293891f36a1f76e2f/pyvalhalla_weekly-3.5.1.post1.dev180-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "92743b5f7340d49fb0adc09afd073dc7ff2080d7c5fa1cb65fcea9377f1e86eb",
"md5": "8aab2da5c75649003e5556dc92e3b6a1",
"sha256": "9c6857206151ec3ece34c26192e86f0db9a2bfd5f534d4d76173c69436180c0f"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp311-cp311-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "8aab2da5c75649003e5556dc92e3b6a1",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9.0",
"size": 70627209,
"upload_time": "2025-07-27T02:20:24",
"upload_time_iso_8601": "2025-07-27T02:20:24.862564Z",
"url": "https://files.pythonhosted.org/packages/92/74/3b5f7340d49fb0adc09afd073dc7ff2080d7c5fa1cb65fcea9377f1e86eb/pyvalhalla_weekly-3.5.1.post1.dev180-cp311-cp311-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a315a0b9b00089455e696cfe1606c986af2da53dbf124039feed2f6a1a6b3c20",
"md5": "09504f3c02cb19aabcb2782269ecb974",
"sha256": "cad9901e17fdc65f8a09ec45337ff8f578c64cd2b9813de02ea1b9b150c0e178"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp311-cp311-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "09504f3c02cb19aabcb2782269ecb974",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9.0",
"size": 85473918,
"upload_time": "2025-07-27T02:20:29",
"upload_time_iso_8601": "2025-07-27T02:20:29.115216Z",
"url": "https://files.pythonhosted.org/packages/a3/15/a0b9b00089455e696cfe1606c986af2da53dbf124039feed2f6a1a6b3c20/pyvalhalla_weekly-3.5.1.post1.dev180-cp311-cp311-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "00a1c2c0c5e1a9bb75504b84db1d9edf1c02a37ac11f8d3d014eae40acc453fd",
"md5": "5970cb3ce756dfdea59691a63257ec05",
"sha256": "1008f450901633c5ebaabca88e966d77e6356f133f0c050b7ab5dd1b11290aae"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "5970cb3ce756dfdea59691a63257ec05",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9.0",
"size": 27387634,
"upload_time": "2025-07-27T02:20:33",
"upload_time_iso_8601": "2025-07-27T02:20:33.165741Z",
"url": "https://files.pythonhosted.org/packages/00/a1/c2c0c5e1a9bb75504b84db1d9edf1c02a37ac11f8d3d014eae40acc453fd/pyvalhalla_weekly-3.5.1.post1.dev180-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fa626c98db3b2c7201a6af0af3d8c3334a073823873cb91b760c3c1ed5147917",
"md5": "f8a90f9f81662b2927f15dbb6c8ef2da",
"sha256": "659274a6088d3f448541de4b7035fab55ee299ef21b89c719bb9154277ec7b68"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp312-cp312-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "f8a90f9f81662b2927f15dbb6c8ef2da",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9.0",
"size": 70626963,
"upload_time": "2025-07-27T02:20:36",
"upload_time_iso_8601": "2025-07-27T02:20:36.298107Z",
"url": "https://files.pythonhosted.org/packages/fa/62/6c98db3b2c7201a6af0af3d8c3334a073823873cb91b760c3c1ed5147917/pyvalhalla_weekly-3.5.1.post1.dev180-cp312-cp312-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dcf23a57c9f1e9316cbdc0a77a6068c3acbf5ea23b503bf5280448cd90d734d8",
"md5": "181d178577d88b2dd0c4debc1e1d1aea",
"sha256": "f65909eac4d05eed61ad87d8f5c839df71c948fa71bc5707297798c3ec472000"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp312-cp312-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "181d178577d88b2dd0c4debc1e1d1aea",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9.0",
"size": 85474984,
"upload_time": "2025-07-27T02:20:40",
"upload_time_iso_8601": "2025-07-27T02:20:40.753600Z",
"url": "https://files.pythonhosted.org/packages/dc/f2/3a57c9f1e9316cbdc0a77a6068c3acbf5ea23b503bf5280448cd90d734d8/pyvalhalla_weekly-3.5.1.post1.dev180-cp312-cp312-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d5943cd0771297fed7f21a2bbef3d033855e99745f4da1bad5d63df44aacbaf3",
"md5": "0c4edf286b041ea007c745ba2b599046",
"sha256": "d2bbc9343dc7565ec7272185bb8ad65ad48cad088d6a1fca675910b1998a4979"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "0c4edf286b041ea007c745ba2b599046",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9.0",
"size": 27388424,
"upload_time": "2025-07-27T02:20:44",
"upload_time_iso_8601": "2025-07-27T02:20:44.804664Z",
"url": "https://files.pythonhosted.org/packages/d5/94/3cd0771297fed7f21a2bbef3d033855e99745f4da1bad5d63df44aacbaf3/pyvalhalla_weekly-3.5.1.post1.dev180-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "190a253c4c82af3637cb18e9b7d19b64fcc6297b51bb343b0fe04a3293c3cb8f",
"md5": "e924b3c7cd781767a26889266fb1d54e",
"sha256": "82aa011ffce9df9e36ced0655384ca1b3185bcc53f96cc1395d324448457d669"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp313-cp313-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "e924b3c7cd781767a26889266fb1d54e",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9.0",
"size": 70626841,
"upload_time": "2025-07-27T02:20:47",
"upload_time_iso_8601": "2025-07-27T02:20:47.884203Z",
"url": "https://files.pythonhosted.org/packages/19/0a/253c4c82af3637cb18e9b7d19b64fcc6297b51bb343b0fe04a3293c3cb8f/pyvalhalla_weekly-3.5.1.post1.dev180-cp313-cp313-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d094f830f59b63c43b7f5e1d206d39560a3db0880584ff45380eea6a00ffbc79",
"md5": "68f1da00ce6552069560c0a8679a684f",
"sha256": "1491cba5535effd8781aac812345f1f966820cdc71af3b2fe12fb6edcfbc97da"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp313-cp313-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "68f1da00ce6552069560c0a8679a684f",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9.0",
"size": 85474953,
"upload_time": "2025-07-27T02:20:52",
"upload_time_iso_8601": "2025-07-27T02:20:52.372842Z",
"url": "https://files.pythonhosted.org/packages/d0/94/f830f59b63c43b7f5e1d206d39560a3db0880584ff45380eea6a00ffbc79/pyvalhalla_weekly-3.5.1.post1.dev180-cp313-cp313-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8b4eb19a537860641dbe523bf6aa2b03323b193f5f51fc460010552d08745175",
"md5": "9c291e2fbb59ad04bf344e48520ebc10",
"sha256": "d091c54b12a546a0be345d3110f19d3ea61065248c20e5a0762825d70d6b8b2e"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "9c291e2fbb59ad04bf344e48520ebc10",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9.0",
"size": 27388434,
"upload_time": "2025-07-27T02:20:57",
"upload_time_iso_8601": "2025-07-27T02:20:57.894592Z",
"url": "https://files.pythonhosted.org/packages/8b/4e/b19a537860641dbe523bf6aa2b03323b193f5f51fc460010552d08745175/pyvalhalla_weekly-3.5.1.post1.dev180-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "627cc153187254d550f19e474dafac1c909e1d2d6b6849d4433c3f8798586de5",
"md5": "71f47750fe6cf2e1fe02021a1c7441a3",
"sha256": "81a6365c5b04e222f1f39af62c4155f61b0b6af6f550afe41c4d9d76935ec87b"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp39-cp39-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "71f47750fe6cf2e1fe02021a1c7441a3",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9.0",
"size": 70625080,
"upload_time": "2025-07-27T02:21:00",
"upload_time_iso_8601": "2025-07-27T02:21:00.839362Z",
"url": "https://files.pythonhosted.org/packages/62/7c/c153187254d550f19e474dafac1c909e1d2d6b6849d4433c3f8798586de5/pyvalhalla_weekly-3.5.1.post1.dev180-cp39-cp39-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a3ac741ce98dba90aa2d6526b412be6e6ca085a65ac30c74f20b4cfe680ec233",
"md5": "a452924b46f51e4a5961bd24e8ca8a77",
"sha256": "fc5bd11a0eb5fab127771463595e3e85a75cdb0c0b23c629465f31163c0fd218"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp39-cp39-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "a452924b46f51e4a5961bd24e8ca8a77",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9.0",
"size": 85470673,
"upload_time": "2025-07-27T02:21:05",
"upload_time_iso_8601": "2025-07-27T02:21:05.344772Z",
"url": "https://files.pythonhosted.org/packages/a3/ac/741ce98dba90aa2d6526b412be6e6ca085a65ac30c74f20b4cfe680ec233/pyvalhalla_weekly-3.5.1.post1.dev180-cp39-cp39-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "64f76dc365c8e9d82806d43e38622d38ed40c439b0627a3f6dbe426037a182ef",
"md5": "3910815b680ca1c2ff3bdac4d9b332a4",
"sha256": "55d94f67e5cf24134add48796e3c8cfb03af64de4ba5c17c434bcdad03f1e1ee"
},
"downloads": -1,
"filename": "pyvalhalla_weekly-3.5.1.post1.dev180-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "3910815b680ca1c2ff3bdac4d9b332a4",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9.0",
"size": 27391238,
"upload_time": "2025-07-27T02:21:10",
"upload_time_iso_8601": "2025-07-27T02:21:10.913383Z",
"url": "https://files.pythonhosted.org/packages/64/f7/6dc365c8e9d82806d43e38622d38ed40c439b0627a3f6dbe426037a182ef/pyvalhalla_weekly-3.5.1.post1.dev180-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-27 02:20:12",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "valhalla",
"github_project": "valhalla",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"circle": true,
"lcname": "pyvalhalla-weekly"
}