diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 523cb8a9..96947efc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,7 +23,7 @@ jobs: name: "${{ matrix.os }}: Python ${{ matrix.python-version }}" strategy: matrix: - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11", "3.12"] os: ["ubuntu-20.04", "macos-latest"] runs-on: "${{ matrix.os }}" @@ -45,22 +45,21 @@ jobs: - name: "Install rust for arm64" if: startsWith(matrix.os, 'mac') && (matrix.python-version == '3.9') run: | + rustup target add x86_64-apple-darwin rustup target add aarch64-apple-darwin - # - uses: Swatinem/rust-cache@v1 - # with: - # key: "${{ matrix.os }}-${{ matrix.python-version }}" + - name: "Install gfortran" + if: startsWith(matrix.os, 'mac') + run: | + brew install gcc + gfortran --version || sudo ln -s `which gfortran-12` /usr/local/bin/gfortran + - uses: Swatinem/rust-cache@v1 + with: + key: "${{ matrix.os }}-${{ matrix.python-version }}" - name: "Install gfortran" if: contains(matrix.os, 'ubuntu') run: | sudo apt-get update - sudo apt-get install -y gfortran - - name: Install gfortran 2 - if: contains(matrix.os, 'macos') - run: | - set -euo pipefail - brew install gcc@9 || true - gfortran --version || sudo ln -s /usr/local/bin/gfortran-9 /usr/local/bin/gfortran - gfortran --version + sudo apt-get install -y gfortran ninja-build lld - name: "Install dependencies and code" run: | set -euo pipefail @@ -76,27 +75,27 @@ jobs: make test - name: "Build macOS wheels" if: startsWith(matrix.os, 'mac') && (matrix.python-version == '3.9') - uses: pypa/cibuildwheel@v2.12.0 + uses: pypa/cibuildwheel@v2.21.3 env: - MACOSX_DEPLOYMENT_TARGET: "10.15" + MACOSX_DEPLOYMENT_TARGET: "11" CIBW_ARCHS_MACOS: "x86_64 arm64" - CIBW_SKIP: "cp37-macosx_arm64 cp36* pp*" + CIBW_SKIP: "cp37-macosx_arm64 cp36* cp37* cp38* cp39* cp313* pp*" CIBW_BEFORE_BUILD: "touch filpreload/src/_filpreload.c" # force rebuild of Python code with new interpreter CIBW_TEST_COMMAND: python -m filprofiler run {project}/benchmarks/pystone.py with: output-dir: dist - name: "Build manylinux wheels" - if: startsWith(matrix.os, 'ubuntu') && (matrix.python-version == '3.8') + if: startsWith(matrix.os, 'ubuntu') && (matrix.python-version == '3.9') run: | set -euo pipefail . venv/bin/activate make manylinux-wheel # Test wheel deactivate - python3.8 -m venv venv2 + python3.9 -m venv venv2 . venv2/bin/activate pip install -r requirements-dev.txt - pip install dist/*-cp38-*manylinux*.whl + pip install dist/*-cp39-*manylinux*.whl mv filprofiler filprofiler.disabled make test-python-no-deps - uses: actions/upload-artifact@v3 @@ -104,7 +103,7 @@ jobs: name: "${{ matrix.os }}-${{ matrix.python-version }}-wheel" path: dist/*.whl # - name: Publish distribution 📦 to Test PyPI - # if: (startsWith(matrix.os, 'ubuntu') && (matrix.python-version == '3.8')) || startsWith(matrix.os, 'mac') + # if: (startsWith(matrix.os, 'ubuntu') && (matrix.python-version == '3.9')) || startsWith(matrix.os, 'mac') # env: # TWINE_USERNAME: __token__ # TWINE_PASSWORD: ${{ secrets.TEST_PYPI_TOKEN }} @@ -114,7 +113,7 @@ jobs: # twine check dist/*.whl # twine upload --repository testpypi dist/*.whl - name: Publish distribution 📦 to PyPI - if: startsWith(github.event.ref, 'refs/tags') && ((startsWith(matrix.os, 'ubuntu') && (matrix.python-version == '3.8')) || (startsWith(matrix.os, 'mac') && (matrix.python-version == '3.9'))) + if: startsWith(github.event.ref, 'refs/tags') && ((startsWith(matrix.os, 'ubuntu') && (matrix.python-version == '3.9')) || (startsWith(matrix.os, 'mac') && (matrix.python-version == '3.9'))) env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} @@ -147,10 +146,10 @@ jobs: if: startsWith(github.event.ref, 'refs/tags') env: CIBW_ARCHS_LINUX: aarch64 - CIBW_BEFORE_ALL_LINUX: "curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain stable -y" + CIBW_BEFORE_ALL_LINUX: "yum install -y lld; curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain stable -y" CIBW_BEFORE_BUILD: "touch filpreload/src/_filpreload.c" # force rebuild of Python code with new interpreter CIBW_ENVIRONMENT: 'PATH="$PATH:$HOME/.cargo/bin"' - CIBW_SKIP: "cp27-* cp34-* cp35-* cp36-* cp311-* pp* *-musllinux*" + CIBW_SKIP: "cp27-* cp34-* cp35-* cp36-* cp37-* cp38-* cp313-* pp* *-musllinux*" CIBW_TEST_COMMAND: python -m filprofiler run {project}/benchmarks/pystone.py steps: - uses: actions/checkout@v3 @@ -163,7 +162,7 @@ jobs: with: platforms: arm64 - name: Build wheels - uses: pypa/cibuildwheel@v2.12.0 + uses: pypa/cibuildwheel@v2.21.3 with: output-dir: dist - uses: actions/upload-artifact@v3 diff --git a/CHANGELOG.md b/CHANGELOG.md index d59d4957..9422ec02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Release notes +## 2024.11.0 (2024-11-03) + +### Regressions + +* Run with more overhead, in order to support newer versions of Python. + +### Changes + +* Added support for Python 3.12. +* Dropped support for Python 3.7 and 3.8. + ## 2023.3.1 (2023-3-18) ### Bugfixes diff --git a/Cargo.lock b/Cargo.lock index 8479c597..2ca167ba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -84,44 +84,45 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.59.2" +version = "0.68.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" +checksum = "726e4313eb6ec35d2730258ad4e15b547ee75d6afaa1361a922e78e59b7d8078" dependencies = [ - "bitflags", + "bitflags 2.6.0", "cexpr", "clang-sys", "lazy_static", "lazycell", + "log", "peeking_take_while", + "prettyplease", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", + "syn 2.0.60", + "which", ] [[package]] name = "bindgen" -version = "0.60.1" +version = "0.69.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" dependencies = [ - "bitflags", + "bitflags 2.6.0", "cexpr", "clang-sys", - "clap", - "env_logger", + "itertools", "lazy_static", "lazycell", - "log", - "peeking_take_while", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "which", + "syn 2.0.60", ] [[package]] @@ -145,6 +146,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + [[package]] name = "bitmaps" version = "2.1.0" @@ -208,31 +215,7 @@ checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" dependencies = [ "glob", "libc", - "libloading", -] - -[[package]] -name = "clap" -version = "3.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750" -dependencies = [ - "atty", - "bitflags", - "clap_lex", - "indexmap", - "strsim", - "termcolor", - "textwrap", -] - -[[package]] -name = "clap_lex" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", + "libloading 0.7.4", ] [[package]] @@ -263,7 +246,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -273,27 +256,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] -name = "env_logger" -version = "0.9.1" +name = "errno" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", + "errno-dragonfly", + "libc", + "winapi", ] [[package]] name = "errno" -version = "0.2.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ - "errno-dragonfly", "libc", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -336,9 +316,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fs_extra" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "getrandom" @@ -364,10 +344,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] -name = "hashbrown" -version = "0.12.3" +name = "heck" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -378,12 +358,6 @@ dependencies = [ "libc", ] -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "im" version = "15.1.0" @@ -398,21 +372,11 @@ dependencies = [ "version_check", ] -[[package]] -name = "indexmap" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" -dependencies = [ - "autocfg", - "hashbrown", -] - [[package]] name = "indoc" -version = "1.0.8" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da2d6f23ffea9d7e76c53eee25dfb67bcd8fde7f1198b0855350698c9f07c780" +checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" [[package]] name = "inferno" @@ -493,6 +457,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + [[package]] name = "libm" version = "0.2.6" @@ -501,12 +475,12 @@ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libproc" -version = "0.12.0" +version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b799ad155d75ce914c467ee5627b62247c20d4aedbd446f821484cebf3cded7" +checksum = "ae9ea4b75e1a81675429dafe43441df1caea70081e82246a8cccf514884a88bb" dependencies = [ - "bindgen 0.59.2", - "errno", + "bindgen 0.69.4", + "errno 0.3.9", "libc", ] @@ -535,15 +509,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - [[package]] name = "mach2" version = "0.4.1" @@ -561,18 +526,9 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] @@ -594,15 +550,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.23.1" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ - "bitflags", - "cc", + "bitflags 1.3.2", "cfg-if", "libc", - "memoffset 0.6.5", ] [[package]] @@ -612,7 +566,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", ] @@ -662,12 +616,6 @@ version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" -[[package]] -name = "os_str_bytes" -version = "6.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" - [[package]] name = "parking_lot" version = "0.12.1" @@ -697,29 +645,45 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + [[package]] name = "ppv-lite86" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +[[package]] +name = "prettyplease" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +dependencies = [ + "proc-macro2", + "syn 2.0.60", +] + [[package]] name = "proc-macro2" -version = "1.0.46" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" +checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" dependencies = [ "unicode-ident", ] [[package]] name = "proc-maps" -version = "0.3.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c790484f98e8b00e2385ebde989077698f99417307a74361001ada102f8c2ce" +checksum = "0ec8fdc22cb95c02f6a26a91fb1cd60a7a115916c2ed3b09d0a312e11785bd57" dependencies = [ "anyhow", - "bindgen 0.60.1", + "bindgen 0.68.1", "libc", "libproc", "mach2", @@ -733,7 +697,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29f1b898011ce9595050a68e60f90bad083ff2987a695a42357134c8381fba70" dependencies = [ "bit-set", - "bitflags", + "bitflags 1.3.2", "byteorder", "lazy_static", "num-traits", @@ -749,14 +713,14 @@ dependencies = [ [[package]] name = "psutil" -version = "3.2.2" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f866af2b0f8e4b0d2d00aad8a9c5fc48fad33466cd99a64cbb3a4c1505f1a62d" +checksum = "5e617cc9058daa5e1fe5a0d23ed745773a5ee354111dad1ec0235b0cc16b6730" dependencies = [ "cfg-if", "darwin-libproc", - "mach", - "nix 0.23.1", + "mach2", + "nix 0.24.3", "once_cell", "thiserror", ] @@ -774,7 +738,7 @@ dependencies = [ "itertools", "lazy_static", "libc", - "libloading", + "libloading 0.8.5", "once_cell", "parking_lot", "proc-maps", @@ -788,15 +752,16 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.18.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06a3d8e8a46ab2738109347433cb7b96dffda2e4a218b03ef27090238886b147" +checksum = "53bdbb96d49157e65d45cc287af5f32ffadd5f4761438b527b055fb0d4bb8233" dependencies = [ "cfg-if", "indoc", "libc", - "memoffset 0.8.0", + "memoffset", "parking_lot", + "portable-atomic", "pyo3-build-config", "pyo3-ffi", "pyo3-macros", @@ -805,9 +770,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.18.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75439f995d07ddfad42b192dfcf3bc66a7ecfd8b4a1f5f6f046aa5c2c5d7677d" +checksum = "deaa5745de3f5231ce10517a1f5dd97d53e5a2fd77aa6b5842292085831d48d7" dependencies = [ "once_cell", "target-lexicon", @@ -815,9 +780,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.18.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "839526a5c07a17ff44823679b68add4a58004de00512a95b6c1c98a6dcac0ee5" +checksum = "62b42531d03e08d4ef1f6e85a2ed422eb678b8cd62b762e53891c05faf0d4afa" dependencies = [ "libc", "pyo3-build-config", @@ -825,25 +790,27 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.18.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd44cf207476c6a9760c4653559be4f206efafb924d3e4cbf2721475fc0d6cc5" +checksum = "7305c720fa01b8055ec95e484a6eca7a83c841267f0dd5280f0c8b8551d2c158" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn", + "syn 2.0.60", ] [[package]] name = "pyo3-macros-backend" -version = "0.18.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1f43d8e30460f36350d18631ccf85ded64c059829208fe680904c65bcd0a4c" +checksum = "7c7e9b68bb9c3149c5b0cade5d07f953d6d125eb4337723c4ccdb665f1f96185" dependencies = [ + "heck", "proc-macro2", + "pyo3-build-config", "quote", - "syn", + "syn 2.0.60", ] [[package]] @@ -869,9 +836,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.21" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -930,7 +897,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -977,8 +944,8 @@ version = "0.36.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" dependencies = [ - "bitflags", - "errno", + "bitflags 1.3.2", + "errno 0.2.8", "io-lifetimes", "libc", "linux-raw-sys", @@ -1020,7 +987,7 @@ checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1052,16 +1019,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9091b6114800a5f2141aee1d1b9d6ca3592ac062dc5decb3764ec5895a47b4eb" [[package]] -name = "strsim" -version = "0.10.0" +name = "syn" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] [[package]] name = "syn" -version = "1.0.107" +version = "2.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" dependencies = [ "proc-macro2", "quote", @@ -1087,21 +1059,6 @@ dependencies = [ "windows-sys 0.42.0", ] -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "textwrap" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" - [[package]] name = "thiserror" version = "1.0.37" @@ -1119,7 +1076,7 @@ checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1163,9 +1120,9 @@ checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" [[package]] name = "unindent" -version = "0.1.11" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c" +checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" [[package]] name = "version_check" @@ -1215,15 +1172,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -1249,12 +1197,12 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm", + "windows_aarch64_gnullvm 0.42.1", "windows_aarch64_msvc 0.42.1", "windows_i686_gnu 0.42.1", "windows_i686_msvc 0.42.1", "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", + "windows_x86_64_gnullvm 0.42.1", "windows_x86_64_msvc 0.42.1", ] @@ -1264,7 +1212,16 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.1", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -1273,21 +1230,43 @@ version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" dependencies = [ - "windows_aarch64_gnullvm", + "windows_aarch64_gnullvm 0.42.1", "windows_aarch64_msvc 0.42.1", "windows_i686_gnu 0.42.1", "windows_i686_msvc 0.42.1", "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", + "windows_x86_64_gnullvm 0.42.1", "windows_x86_64_msvc 0.42.1", ] +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + [[package]] name = "windows_aarch64_msvc" version = "0.36.1" @@ -1300,6 +1279,12 @@ version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + [[package]] name = "windows_i686_gnu" version = "0.36.1" @@ -1312,6 +1297,18 @@ version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + [[package]] name = "windows_i686_msvc" version = "0.36.1" @@ -1324,6 +1321,12 @@ version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + [[package]] name = "windows_x86_64_gnu" version = "0.36.1" @@ -1336,12 +1339,24 @@ version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + [[package]] name = "windows_x86_64_msvc" version = "0.36.1" @@ -1353,3 +1368,9 @@ name = "windows_x86_64_msvc" version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" diff --git a/Cargo.toml b/Cargo.toml index ea747390..0759664f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] - +resolver = "2" members = [ "memapi", "filpreload", diff --git a/Makefile b/Makefile index ae1d2562..80c2c8ee 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ test-python-no-deps: cythonize -3 -i tests/test-scripts/pymalloc.pyx c++ -shared -fPIC -lpthread tests/test-scripts/cpp.cpp -o tests/test-scripts/cpp.so cc -shared -fPIC -lpthread tests/test-scripts/malloc_on_thread_exit.c -o tests/test-scripts/malloc_on_thread_exit.so - cd tests/test-scripts && python -m numpy.f2py -c fortran.f90 -m fortran + cd tests/test-scripts && python -m numpy.f2py --backend meson -c fortran.f90 -m fortran env RUST_BACKTRACE=1 py.test -v tests/ .PHONY: wheel @@ -46,7 +46,7 @@ wheel: .PHONY: manylinux-wheel manylinux-wheel: - docker run -u $(shell id -u):$(shell id -g) -v $(PWD):/src quay.io/pypa/manylinux2014_x86_64:latest /src/wheels/build-wheels.sh + docker run -v $(PWD):/src quay.io/pypa/manylinux_2_28_x86_64 /src/wheels/build-wheels.sh .PHONY: clean clean: @@ -68,7 +68,8 @@ data_kernelspec/kernel.json: generate-kernelspec.py .PHONY: benchmark benchmark: make benchmarks/results/*.json - python setup.py --version > benchmarks/results/version.txt + pip install setuptools_scm + python -m setuptools_scm > benchmarks/results/version.txt git diff --word-diff benchmarks/results/ .PHONY: benchmarks/results/pystone.json diff --git a/README.md b/README.md index d892ec58..845fed7c 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ In order to reduce memory usage, you first need to figure out: That's exactly what Fil will help you find. Fil an open source memory profiler designed for data processing applications written in Python, and includes native support for Jupyter. -Fil runs on Linux and macOS, and supports CPython 3.7 and later. +Fil runs on Linux and macOS, and supports CPython 3.9 and later. ## Getting help diff --git a/compile_flags.txt b/compile_flags.txt index 8c34ada9..3265ed20 100644 --- a/compile_flags.txt +++ b/compile_flags.txt @@ -1 +1 @@ --I/usr/include/python3.8 +-I/usr/include/python3.9 diff --git a/filpreload/Cargo.toml b/filpreload/Cargo.toml index 93fb6293..fcbc0b60 100644 --- a/filpreload/Cargo.toml +++ b/filpreload/Cargo.toml @@ -18,7 +18,7 @@ path = "../memapi" features = [] [dependencies.pyo3] -version = "0.18" +version = "0.20" default-features = false [build-dependencies] diff --git a/filpreload/build.rs b/filpreload/build.rs index b5625663..8e53fb3b 100644 --- a/filpreload/build.rs +++ b/filpreload/build.rs @@ -32,22 +32,18 @@ fn main() -> Result<(), std::io::Error> { { // On Linux GNU ld can't handle two version files (one from Rust, one from // us) at the same time without blowing up. - println!("cargo:rustc-cdylib-link-arg=-fuse-ld=gold"); + println!("cargo:rustc-cdylib-link-arg=-fuse-ld=lld"); + + // On 64-bit Linux, mmap() is another way of saying mmap64, or vice versa, + // so we point to function of our own. + println!("cargo:rustc-cdylib-link-arg=-Wl,--defsym=mmap=fil_mmap_impl"); + println!("cargo:rustc-cdylib-link-arg=-Wl,--defsym=mmap64=fil_mmap_impl"); // Use a versionscript to limit symbol visibility. println!( "cargo:rustc-cdylib-link-arg=-Wl,--version-script={}/versionscript.txt", cur_dir.to_string_lossy() ); - // Make sure aligned_alloc() is public under its real name; workaround for - // old glibc headers in Conda. - println!( - "cargo:rustc-cdylib-link-arg=-Wl,--defsym=aligned_alloc=reimplemented_aligned_alloc" - ); - // On 64-bit Linux, mmap() is another way of saying mmap64, or vice versa, - // so we point to function of our own. - println!("cargo:rustc-cdylib-link-arg=-Wl,--defsym=mmap=fil_mmap_impl"); - println!("cargo:rustc-cdylib-link-arg=-Wl,--defsym=mmap64=fil_mmap_impl"); }; // Compilation options are taken from Python's build configuration. diff --git a/filpreload/src/_filpreload.c b/filpreload/src/_filpreload.c index d2b2744f..60e8bb65 100644 --- a/filpreload/src/_filpreload.c +++ b/filpreload/src/_filpreload.c @@ -1,5 +1,8 @@ #include "Python.h" #include "ceval.h" +#include "pyframe.h" +#include "pylifecycle.h" +#include "pystate.h" #if PY_MINOR_VERSION < 11 #include "code.h" #else @@ -54,9 +57,9 @@ PyCodeObject *PyFrame_GetCode(PyFrameObject *frame) { #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) - // Underlying APIs we're wrapping: - static void *(*underlying_real_mmap)(void *addr, size_t length, int prot, - int flags, int fd, off_t offset) = 0; +// Underlying APIs we're wrapping: +static void *(*underlying_real_mmap)(void *addr, size_t length, int prot, + int flags, int fd, off_t offset) = 0; static int (*underlying_real_pthread_create)(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), @@ -265,6 +268,9 @@ static void finish_call() { __attribute__((visibility("hidden"))) int fil_tracer(PyObject *obj, PyFrameObject *frame, int what, PyObject *arg) { switch (what) { + case PyTrace_LINE: + current_line_number = frame->f_lineno; + break; case PyTrace_CALL: /* We want an efficient identifier for filename+fuction name. So we register @@ -356,7 +362,7 @@ __attribute__((visibility("default"))) void register_fil_tracer() { pymemprofile_clear_current_callstack(); decrement_reentrancy(); // We use 123 as a marker object for tests. - PyEval_SetProfile(fil_tracer, PyLong_FromLong(123)); + PyEval_SetTrace(fil_tracer, PyLong_FromLong(123)); } /// Dump the current peak memory usage to disk. @@ -518,7 +524,6 @@ fil_mmap_impl(void *addr, size_t length, int prot, int flags, int fd, } void *result = underlying_real_mmap(addr, length, prot, flags, fd, offset); - // For now we only track anonymous mmap()s: if (result != MAP_FAILED && (flags & MAP_ANONYMOUS) && should_track_memory()) { @@ -537,19 +542,8 @@ SYMBOL_PREFIX(mmap)(void *addr, size_t length, int prot, int flags, int fd, } #endif -// Old glibc that Conda uses defines aligned_alloc() using inline that doesn't -// match this signature, which messes up the SYMBOL_PREFIX() stuff on Linux. So, -// we do reimplemented_aligned_alloc, the name macOS technique uses, and then -// rely on symbol alias (see --defsym in setup.py) to fix it. -// -// On macOS, aligned_alloc is only in macOS 10.15 or later, we need to define -// it. -#ifdef __APPLE__ -void *aligned_alloc(size_t alignment, size_t size); -#endif - __attribute__((visibility("default"))) void * -reimplemented_aligned_alloc(size_t alignment, size_t size) { +SYMBOL_PREFIX(aligned_alloc)(size_t alignment, size_t size) { increment_reentrancy(); void *result = REAL_IMPL(aligned_alloc)(alignment, size); decrement_reentrancy(); diff --git a/filpreload/versionscript.txt b/filpreload/versionscript.txt index 34b3a5d1..d92c668c 100644 --- a/filpreload/versionscript.txt +++ b/filpreload/versionscript.txt @@ -11,7 +11,6 @@ munmap; posix_memalign; aligned_alloc; - malloc_usable_size; pthread_create; fork; local: *; diff --git a/filprofiler/_tracer.py b/filprofiler/_tracer.py index e3a136c0..7ea0b79f 100644 --- a/filprofiler/_tracer.py +++ b/filprofiler/_tracer.py @@ -66,7 +66,7 @@ def start_tracing(output_path: Union[str, Path]): """Start tracing allocations.""" preload.fil_reset(str(output_path).encode("utf-8")) preload.fil_start_tracking() - threading.setprofile(_start_thread_trace) + threading.settrace(_start_thread_trace) preload.register_fil_tracer() @@ -88,8 +88,8 @@ def stop_tracing(output_path: str) -> str: Returns path to the index HTML page of the report. """ - sys.setprofile(None) - threading.setprofile(None) + sys.settrace(None) + threading.settrace(None) preload.fil_stop_tracking() result = create_report(output_path) # Clear allocations; we don't need them anymore, and they're just wasting diff --git a/memapi/Cargo.toml b/memapi/Cargo.toml index 41a253ae..52848822 100644 --- a/memapi/Cargo.toml +++ b/memapi/Cargo.toml @@ -15,7 +15,7 @@ derivative = "2.2" lazy_static = "1.4" backtrace = "0.3" once_cell = "1.17" -libloading = "0.7" +libloading = "0.8" libc = "0.2" serde = {version = "1", features = ["derive"] } parking_lot = "0.12.1" @@ -30,7 +30,7 @@ default-features = false features = ["memory", "process"] [dependencies.pyo3] -version = "0.18" +version = "0.20" [target.'cfg(target_os = "linux")'.dependencies] cgroups-rs = "0.3.2" diff --git a/memapi/src/memorytracking.rs b/memapi/src/memorytracking.rs index 2039b8a6..66c3db41 100644 --- a/memapi/src/memorytracking.rs +++ b/memapi/src/memorytracking.rs @@ -182,7 +182,7 @@ impl Callstack { pub fn start_call(&mut self, parent_line_number: u32, callsite_id: CallSiteId) { if parent_line_number != 0 { - if let Some(mut call) = self.calls.last_mut() { + if let Some(call) = self.calls.last_mut() { call.line_number = LineNumberInfo::LineNumber(parent_line_number); } } diff --git a/pyproject.toml b/pyproject.toml index 3239405d..0f9bd727 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,3 +19,8 @@ underlines = ["", "", ""] # Disable building PyPy wheels, since we use CPython internals, and 3.10 until # it's ready. skip = ["pp*"] + +[tool.cibuildwheel.linux] +before-all = "" +environment = 'PATH="$HOME/.cargo/bin":$PATH' +manylinux-x86_64-image = "quay.io/pypa/manylinux_2_28_x86_64" diff --git a/requirements-dev.txt b/requirements-dev.txt index 9c5dd43e..3faa977b 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,6 +1,6 @@ pytest pampy -numpy +numpy>1 #scikit-image cython black @@ -16,3 +16,5 @@ numexpr blosc psutil flake8 +meson # for f2py +ninja # for f2py diff --git a/setup.py b/setup.py index 4d41da97..d9c6998c 100644 --- a/setup.py +++ b/setup.py @@ -45,13 +45,14 @@ def read(path): "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", ], - python_requires=">=3.7", + python_requires=">=3.9", license="Apache 2.0", url="https://pythonspeed.com/fil/", maintainer="Itamar Turner-Trauring", diff --git a/tests/test-scripts/fil-interpreter.py b/tests/test-scripts/fil-interpreter.py index 4efc3971..abb9749b 100644 --- a/tests/test-scripts/fil-interpreter.py +++ b/tests/test-scripts/fil-interpreter.py @@ -15,7 +15,7 @@ import pytest import numpy as np -import numpy.core.numeric +import numpy._core.numeric from pampy import _ as ANY, match from IPython.core.displaypub import CapturingDisplayPublisher from IPython.core.interactiveshell import InteractiveShell @@ -54,7 +54,7 @@ def f(): assert result == 1234 # Allocations were tracked: - path = ((__file__, "f", 49), (numpy.core.numeric.__file__, "ones", ANY)) + path = ((__file__, "f", 49), (numpy._core.numeric.__file__, "ones", ANY)) allocations = get_allocations(tmpdir) assert match(allocations, {path: big}, as_mb) == pytest.approx(32, 0.1) @@ -100,7 +100,7 @@ def test_ipython_profiling(tmpdir): # Allocations were tracked: path = ( (re.compile("", 9), ones) toobig_alloc = ((script, "", 12), ones) @@ -473,8 +473,9 @@ def test_interpreter_with_fil(): ) -def test_jupyter(tmpdir): +def test_jupyter(tmp_path): """Jupyter magic can run Fil.""" + tmpdir = tmp_path shutil.copyfile(TEST_SCRIPTS / "jupyter.ipynb", tmpdir / "jupyter.ipynb") check_call( [ @@ -494,8 +495,8 @@ def test_jupyter(tmpdir): html = f.read() assert "", 8), (numpy.core.numeric.__file__, "ones", ANY)) - path2 = ((script, "", 11), (numpy.core.numeric.__file__, "ones", ANY)) + path1 = ((script, "", 8), (numpy._core.numeric.__file__, "ones", ANY)) + path2 = ((script, "", 11), (numpy._core.numeric.__file__, "ones", ANY)) allocations_sigusr2 = get_allocations(sigusr2, direct=True) assert match(allocations_sigusr2, {path1: big}, as_mb) == pytest.approx(20, 0.1) diff --git a/wheels/build-wheels.sh b/wheels/build-wheels.sh index d1b51fe3..2c256830 100755 --- a/wheels/build-wheels.sh +++ b/wheels/build-wheels.sh @@ -1,5 +1,6 @@ #!/bin/bash set -euo pipefail +yum install -y lld mkdir /tmp/home mkdir /tmp/wheel @@ -17,16 +18,15 @@ rm -f filprofiler/_filpreload*.so rm -f filprofiler/_filpreload*.dylib rm -rf build -for PYBIN in /opt/python/cp{37,38,39,310,311}*/bin; do +for PYBIN in /opt/python/cp{39,310,311,312}*/bin; do touch filpreload/src/_filpreload.c # force rebuild of Python code with new interpreter export PYO3_PYTHON="$PYBIN/python" "${PYBIN}/pip" install -U setuptools wheel setuptools-rust pip "${PYBIN}/python" -m pip wheel -w /tmp/wheel . done -auditwheel repair --plat manylinux2014_x86_64 -w dist/ /tmp/wheel/filprofiler*cp37*whl -auditwheel repair --plat manylinux2014_x86_64 -w dist/ /tmp/wheel/filprofiler*cp38*whl -auditwheel repair --plat manylinux2014_x86_64 -w dist/ /tmp/wheel/filprofiler*cp39*whl -auditwheel repair --plat manylinux2014_x86_64 -w dist/ /tmp/wheel/filprofiler*cp310*whl -auditwheel repair --plat manylinux2014_x86_64 -w dist/ /tmp/wheel/filprofiler*cp311*whl +auditwheel repair --plat manylinux_2_28_x86_64 -w dist/ /tmp/wheel/filprofiler*cp39*whl +auditwheel repair --plat manylinux_2_28_x86_64 -w dist/ /tmp/wheel/filprofiler*cp310*whl +auditwheel repair --plat manylinux_2_28_x86_64 -w dist/ /tmp/wheel/filprofiler*cp311*whl +auditwheel repair --plat manylinux_2_28_x86_64 -w dist/ /tmp/wheel/filprofiler*cp312*whl