Skip to content

pathlib.path.rglob no longer returns sorted files starting at 3.12 #142972

@mflova

Description

@mflova

Bug report

Bug description:

Until 3.11 included, all rglob calls were always returning sorted paths. Or at least, for the code snippet below. Starting at 3.12, this changed. I could not find any warning about it, so I thought it might be a bug.

Here is a reproducible example which can be run as uv run --python X script.py being X either 3.11 or 3.12:

import sys
import tempfile
from pathlib import Path

base = Path(tempfile.mkdtemp(prefix="rppf_tmp_"))
paths = [
    "pipeline_1/20251219-092921_011 - p_analysis/input_arguments.yaml",
    "pipeline_1/20251219-092921_011 - p_analysis/iso_metrics.yaml",
    "pipeline_1/20251219-092921_011 - p_analysis/results.yaml",
    "pipeline_1/20251219-092921_271 - signal_visualization/input_arguments.yaml",
    "pipeline_1/20251219-092921_271 - signal_visualization/signals_compressed.parquet",
    "pipeline_1/20251219-092921_532 - p_analysis/input_arguments.yaml",
    "pipeline_1/20251219-092921_532 - p_analysis/iso_metrics.yaml",
    "pipeline_1/20251219-092921_532 - p_analysis/results.yaml",
    "pipeline_1/20251219-092921_532 - p_analysis/.metadata/metadata.yaml",
    "pipeline_1/20251219-092921_271 - signal_visualization/.metadata/metadata.yaml",
    "pipeline_1/20251219-092921_011 - p_analysis/.metadata/metadata.yaml",
    "pipeline_0/20251219-092917_103 - p_analysis/input_arguments.yaml",
    "pipeline_0/20251219-092917_103 - p_analysis/iso_metrics.yaml",
    "pipeline_0/20251219-092917_103 - p_analysis/results.yaml",
    "pipeline_0/20251219-092918_258 - signal_visualization/input_arguments.yaml",
    "pipeline_0/20251219-092918_258 - signal_visualization/signals_compressed.parquet",
    "pipeline_0/20251219-092918_525 - p_analysis/input_arguments.yaml",
    "pipeline_0/20251219-092918_525 - p_analysis/iso_metrics.yaml",
    "pipeline_0/20251219-092918_525 - p_analysis/results.yaml",
    "pipeline_0/20251219-092918_525 - p_analysis/.metadata/metadata.yaml",
    "pipeline_0/20251219-092918_258 - signal_visualization/.metadata/metadata.yaml",
    "pipeline_0/20251219-092917_103 - p_analysis/.metadata/metadata.yaml",
]

for p in paths:
    f = base / p
    f.parent.mkdir(parents=True, exist_ok=True)
    f.touch()


print(sys.version)
for file in [p for p in base.rglob("*") if not p.is_dir()]:
    print(file.relative_to(base).as_posix())
With 3.11
3.11.14 (main, Dec  9 2025, 18:59:10) [MSC v.1944 64 bit (AMD64)]
pipeline_0/20251219-092917_103 - p_analysis/input_arguments.yaml
pipeline_0/20251219-092917_103 - p_analysis/iso_metrics.yaml
pipeline_0/20251219-092917_103 - p_analysis/results.yaml
pipeline_0/20251219-092917_103 - p_analysis/.metadata/metadata.yaml
pipeline_0/20251219-092918_258 - signal_visualization/input_arguments.yaml
pipeline_0/20251219-092918_258 - signal_visualization/signals_compressed.parquet
pipeline_0/20251219-092918_258 - signal_visualization/.metadata/metadata.yaml
pipeline_0/20251219-092918_525 - p_analysis/input_arguments.yaml
pipeline_0/20251219-092918_525 - p_analysis/iso_metrics.yaml
pipeline_0/20251219-092918_525 - p_analysis/results.yaml
pipeline_0/20251219-092918_525 - p_analysis/.metadata/metadata.yaml
pipeline_1/20251219-092921_011 - p_analysis/input_arguments.yaml
pipeline_1/20251219-092921_011 - p_analysis/iso_metrics.yaml
pipeline_1/20251219-092921_011 - p_analysis/results.yaml
pipeline_1/20251219-092921_011 - p_analysis/.metadata/metadata.yaml
pipeline_1/20251219-092921_271 - signal_visualization/input_arguments.yaml
pipeline_1/20251219-092921_271 - signal_visualization/signals_compressed.parquet
pipeline_1/20251219-092921_271 - signal_visualization/.metadata/metadata.yaml
pipeline_1/20251219-092921_532 - p_analysis/input_arguments.yaml
pipeline_1/20251219-092921_532 - p_analysis/iso_metrics.yaml
pipeline_1/20251219-092921_532 - p_analysis/results.yaml
pipeline_1/20251219-092921_532 - p_analysis/.metadata/metadata.yaml
With 3.12
3.12.11 (main, Jul  1 2025, 18:33:58) [MSC v.1944 64 bit (AMD64)]
pipeline_0/20251219-092917_103 - p_analysis/input_arguments.yaml
pipeline_0/20251219-092917_103 - p_analysis/iso_metrics.yaml
pipeline_0/20251219-092917_103 - p_analysis/results.yaml
pipeline_0/20251219-092918_258 - signal_visualization/input_arguments.yaml
pipeline_0/20251219-092918_258 - signal_visualization/signals_compressed.parquet
pipeline_0/20251219-092918_525 - p_analysis/input_arguments.yaml
pipeline_0/20251219-092918_525 - p_analysis/iso_metrics.yaml
pipeline_0/20251219-092918_525 - p_analysis/results.yaml
pipeline_0/20251219-092917_103 - p_analysis/.metadata/metadata.yaml
pipeline_0/20251219-092918_258 - signal_visualization/.metadata/metadata.yaml
pipeline_0/20251219-092918_525 - p_analysis/.metadata/metadata.yaml
pipeline_1/20251219-092921_011 - p_analysis/input_arguments.yaml
pipeline_1/20251219-092921_011 - p_analysis/iso_metrics.yaml
pipeline_1/20251219-092921_011 - p_analysis/results.yaml
pipeline_1/20251219-092921_271 - signal_visualization/input_arguments.yaml
pipeline_1/20251219-092921_271 - signal_visualization/signals_compressed.parquet
pipeline_1/20251219-092921_532 - p_analysis/input_arguments.yaml
pipeline_1/20251219-092921_532 - p_analysis/iso_metrics.yaml
pipeline_1/20251219-092921_532 - p_analysis/results.yaml
pipeline_1/20251219-092921_011 - p_analysis/.metadata/metadata.yaml
pipeline_1/20251219-092921_271 - signal_visualization/.metadata/metadata.yaml
pipeline_1/20251219-092921_532 - p_analysis/.metadata/metadata.yaml

CPython versions tested on:

3.12

Operating systems tested on:

Windows

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions