# Wheel milestone: 357 of top 360 packages are now wheels

**URL:** <https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892>\
**Category:** Packaging\
**Created:** [August 3, 2023, 8:51am UTC](https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892 "2023-08-03T08:51:40Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![groodt](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/groodt/32/3248_2.png) [@groodt](https://discuss.python.org/u/groodt)\
**Post date:** [August 3, 2023, 8:51am UTC](https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892/1 "2023-08-03T08:51:40Z")

</div>

[https://pythonwheels.com/](https://pythonwheels.com/)

3 remain:  
future (probably can’t be a wheel?)  
pyspark (very difficult to make a wheel)  
sagemaker (probably could be a wheel)

---

<div class="post-metadata">

**Author:** ![mgorny](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/mgorny/32/34029_2.png) [@mgorny](https://discuss.python.org/u/mgorny)\
**Post date:** [August 3, 2023, 9:10am UTC](https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892/2 "2023-08-03T09:10:56Z")

</div>

> [@groodt](#):
>
> future (probably can’t be a wheel?)

No reason why it couldn’t be. However, this package is effectively dead for a long time now, so it’s really worrying that it’s in “top packages”.

---

<div class="post-metadata">

**Author:** ![groodt](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/groodt/32/3248_2.png) [@groodt](https://discuss.python.org/u/groodt)\
**Post date:** [August 3, 2023, 11:26am UTC](https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892/3 "2023-08-03T11:26:41Z")

</div>

There was a release in 2023. I wonder if they’d consider releasing a wheel…

---

<div class="post-metadata">

**Author:** ![ajoino](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/ajoino/32/6907_2.png) [@ajoino](https://discuss.python.org/u/ajoino)\
**Post date:** [August 3, 2023, 1:10pm UTC](https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892/4 "2023-08-03T13:10:19Z")

</div>

Their website isn’t updated with the latest version changelogs so I don’t think they’re super active

---

<div class="post-metadata">

**Author:** ![hugovk](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/hugovk/32/14505_2.png) [@hugovk](https://discuss.python.org/u/hugovk)\
**Post date:** [August 3, 2023, 2:36pm UTC](https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892/5 "2023-08-03T14:36:10Z")

</div>

It’s been requested for future since 2018:

> <https://github.com/PythonCharmers/python-future/issues/411>
>
> Under https://pypi.org/project/future/#files. I see that there is a tar gz file.…
> 
> Having a wheel built and uploaded would also help.
> 
> Relative imports in setup.py would make execution of it complain with modules \`src.future\` not being found.
> \`\`\`
> /some/different/path/python setup.py install
> \`\`\`
> 
> Error:
> 
> \`\`\`
> import src.future
> ModuleNotFoundError: No module named 'src'
> \`\`\`\`
> 
> I found this issue on windows, and got around it by manually building a wheel myself, and installing the wheel through pip.

And for sagemaker since 2022:

> <https://github.com/aws/sagemaker-python-sdk/issues/3181>
>
> \*\*Describe the feature you'd like\*\*
> 
> The benefits of wheels are well documente…d. See: https://pythonwheels.com/
> This package is pure Python and publishing it as both source and as a wheel is simple.
> 
> Would you accept a PR to publish a wheel?
> 
> \*\*How would this feature be used? Please describe.\*\*
> A clear and concise description of the use case for this feature. Please provide an example, if possible.
> 
> \*\*Describe alternatives you've considered\*\*
> A clear and concise description of any alternative solutions or features you've considered.
> 
> \*\*Additional context\*\*
> Add any other context or screenshots about the feature request here.

---

<div class="post-metadata">

**Author:** ![jeanas](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/jeanas/32/8115_2.png) [@jeanas](https://discuss.python.org/u/jeanas)\
**Post date:** [August 3, 2023, 2:42pm UTC](https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892/6 "2023-08-03T14:42:20Z")

</div>

Obligatory XKCD:

 ![](https://us1.discourse-cdn.com/flex002/uploads/python1/original/2X/1/1ec96bd3b3ba35f9b86f8d1ded3b5fbed4cd567d.png)

---

<div class="post-metadata">

**Author:** ![uranusjr](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/uranusjr/32/103_2.png) [@uranusjr](https://discuss.python.org/u/uranusjr)\
**Post date:** [August 4, 2023, 3:57am UTC](https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892/7 "2023-08-04T03:57:25Z")

</div>

> [@mgorny](#):
>
> However, this package is effectively dead for a long time now, so it’s really worrying that it’s in “top packages”.

six is way higher at 14th on the list. I guess a lot of the big software just never updates and there’s really nothing we can do about it.

I’m by far more concerned with SageMaker though. Or OSS from AWS in general really, it is quite noticeably less than on-par from offerings from most other FAANGs. Not they have bad individual developers but more like the company as a whole just don’t care to put enough resource over it…

---

<div class="post-metadata">

**Author:** ![groodt](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/groodt/32/3248_2.png) [@groodt](https://discuss.python.org/u/groodt)\
**Post date:** [August 5, 2023, 4:41am UTC](https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892/8 "2023-08-05T04:41:45Z")

</div>

Looks like they did try a wheel for future. Looks like there is some evidence it doesn’t work on Windows.

> <https://github.com/PythonCharmers/python-future/issues/411#issuecomment-732524466>
>
> Under https://pypi.org/project/future/#files. I see that there is a tar gz file.…
> 
> Having a wheel built and uploaded would also help.
> 
> Relative imports in setup.py would make execution of it complain with modules \`src.future\` not being found.
> \`\`\`
> /some/different/path/python setup.py install
> \`\`\`
> 
> Error:
> 
> \`\`\`
> import src.future
> ModuleNotFoundError: No module named 'src'
> \`\`\`\`
> 
> I found this issue on windows, and got around it by manually building a wheel myself, and installing the wheel through pip.

I don’t have enough context about why a pure Python wheel may have problems on Windows.

---

<div class="post-metadata">

**Author:** ![hugovk](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/hugovk/32/14505_2.png) [@hugovk](https://discuss.python.org/u/hugovk)\
**Post date:** [August 5, 2023, 5:55am UTC](https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892/9 "2023-08-05T05:55:16Z")

</div>

The Windows errors are about installing from sdist.

And they only uploaded wheels for 0.18.0, so I expect people are getting errors with the latest 0.18.3 that only has an sdist.

---

<div class="post-metadata">

**Author:** ![groodt](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/groodt/32/3248_2.png) [@groodt](https://discuss.python.org/u/groodt)\
**Post date:** [August 5, 2023, 6:41am UTC](https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892/10 "2023-08-05T06:41:37Z")

</div>

Oh. Fascinating.

I’m surprised that there can be a problem installing such a popular dependency on Windows. Maybe it only fails under certain conditions.

If the sdist is broken anyway, I wonder why they’ve not pressed ahead with a wheel. The change required is minimal for this package.

I’ll ask for clarification in that PR if the sdist is broken.

---

<div class="post-metadata">

**Author:** ![jeanas](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/jeanas/32/8115_2.png) [@jeanas](https://discuss.python.org/u/jeanas)\
**Post date:** [August 5, 2023, 6:52am UTC](https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892/11 "2023-08-05T06:52:17Z")

</div>

> [@groodt](#):
>
> I’m surprised that there can be a problem installing such a popular dependency on Windows.

There are even more surprising facts.

“Of the 4000 most downloaded packages from PyPI, 489 use non-ASCII characters in their README, and 82 fail to install from source on non-UTF-8 locales due to not specifying an encoding for a non-ASCII file. [[1]](https://peps.python.org/pep-0597/#id10)”

Source: [PEP 597](https://peps.python.org/pep-0597)

---

<div class="post-metadata">

**Author:** ![thejcannon](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/thejcannon/32/23759_2.png) [@thejcannon](https://discuss.python.org/u/thejcannon)\
**Post date:** [August 11, 2023, 3:30pm UTC](https://discuss.python.org/t/wheel-milestone-357-of-top-360-packages-are-now-wheels/30892/12 "2023-08-11T15:30:42Z")

</div>

I’ve been finding that just reaching out and making PRs for release automation leveraging GitHub Actions and all the provided bells/whistles has been working.

`cibuildwheel` ([link](https://cibuildwheel.readthedocs.io/en/stable/)) is a great utility for this if the package has compiled code. Otherwise `pipx run build --sdist --wheel` works out of the box.

I also went the extra mile on these and ran a test run of the action to [https://test.pypi.org](https://test.pypi.org) so that I could demonstrate in a PR comment that the workflow _does_ in fact work, and _does_ upload wheels. I include the article about configuring the GitHub Actions “Trusted Publishers” and even a screenshot of my [test.pypi.org](http://test.pypi.org) configuration for the project.

That way the owner/reviewer should have everything they need to understand what’s happening in the PR.

The only part that isn’t cookie-cutter is figuring out the right trigger for the build. Some projects would use a manual trigger, while others push tags, while others, releases.

* * *

Here’s some examples to get you going:

> **cibuildwheels example**
>
> ```yaml
> name: Upload Python Package
> 
> on:
> release:
> types: [published]
> 
> permissions:
> contents: read
> 
> jobs:
> build_wheels:
> name: Build wheels on ${{ matrix.os }}
> runs-on: ${{ matrix.os }}
> strategy:
> matrix:
> os: [ubuntu-22.04, windows-2022, macos-11]
> 
> steps:
> - uses: actions/checkout@v3
> - name: Build wheels
> uses: pypa/cibuildwheel@v2.15.0
> - uses: actions/upload-artifact@v3
> with:
> path: ./wheelhouse/*.whl
> 
> build_sdist:
> name: Build source distribution
> runs-on: ubuntu-latest
> steps:
> - uses: actions/checkout@v3
> - name: Build sdist
> run: pipx run build --sdist
> - uses: actions/upload-artifact@v3
> with:
> path: dist/*.tar.gz
> 
> upload_pypi:
> needs: [build_wheels, build_sdist]
> runs-on: ubuntu-latest
> environment: pypi
> permissions:
> id-token: write
> steps:
> - uses: actions/download-artifact@v3
> with:
> name: artifact
> path: dist
> - uses: pypa/gh-action-pypi-publish@release/v1
> 
> ```

> **Pure-Python Example**
>
> ```yaml
> name: Release Package
> 
> on: [workflow_dispatch]
> 
> permissions:
> contents: read
> 
> jobs:
> build_package:
> name: Build Package
> runs-on: ubuntu-latest
> steps:
> - uses: actions/checkout@v3
> - name: Build sdist and wheel
> run: pipx run build --sdist --wheel
> - uses: actions/upload-artifact@v3
> with:
> path: dist
> 
> pypi-publish:
> needs: [build_package]
> name: Upload release to PyPI
> runs-on: ubuntu-latest
> environment:
> name: pypi
> permissions:
> id-token: write
> steps:
> - uses: actions/download-artifact@v3
> with:
> name: artifact
> path: dist
> - name: Publish package distributions to PyPI
> uses: pypa/gh-action-pypi-publish@release/v1
> 
> ```
