-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
setuptools removal breaking builds #247
Comments
Hi - sorry for the delayed reply! The reasons the global setuptools install has been dropped are:
The recent Poetry work (which also required the pip / venv changes) being the primary trigger for making this change now. In addition, the design philosophy of this buildpack is to:
Regarding the specific cases of build failures in the OP, you are correct that there will be some packages in the wild that may depend on However:
For example as proof of (2), the django-q package you mention in the OP is broken outside of this CNB already (and has been since the release of Python 3.12):
These packages will also be broken when using Poetry with any Python version (even those before 3.12), since Poetry removes setuptools from any venv if it wasn't declared in the lockfile. (And I presume the same will be the case for It's worth also noting for that specific package, that:
Now obviously, there will be users that either don't realise there is a working fork, or other legacy broken packages out there for which there aren't fixes or a fork. However, given that: ...then I think in practice it shouldn't be too impactful, and there isn't anything we can or should be doing for it.
I'm very much a proponent of using the hashes mode of pip (I was a contributor/co-maintainer of For example, if a
But for most, including me, it's still worth the trade-offs :-) It's also primarily advanced users that are using hashes - who are more than capable of making a one-off fix to their requirements file in cases like these. (And us dropping setuptools is very much a one-off type of change, I don't expect any future CNB changes to cause users to need to update hashes again.) I think perhaps the main issue / point of disconnect here, is that this buildpack is still in preview (and so from our perspective is subject to change, and only has early adopter users who know what they are getting into and are both able and happy to work through any compatibility changes), whereas it sounds like from your perspective, you're using this CNB in a production service with end users who are expecting stability (and I'm presuming may not know or care what a CNB is)? Does AppPack currently mirror/pin the builder images? If not, perhaps controlling how these are rolled out to your users might help smooth things out until the CNB reaches GA and our ideas of project status/stability are more in alignment? |
Where can I track what is GA vs preview? Yes, we're typically letting users pull the latest |
All things Heroku+CNB are currently "in preview" and not generally available. For now, it's currently not possible to build or deploy CNBs on Heroku (the new CNB build system and rest of platform changes are internal only) - the "preview" is people being able to try CNBs out via Pack CLI or similar. The preview was announced here: And the preview status is documented in places like:
Prior to the March 2024 preview announcement, iirc repos READMEs and/or GitHub repo description metadata described the projects as "experimental". The Heroku roadmap item for platform support for CNBs is here: |
So there's a bit of nuance here - all of our CNB buildpacks and the builder images are already capable of producing production-ready OCI images, it's more that the buildpacks don't necessarily support all features yet, and we aren't making the same release-to-release change stability guarantees that we would make for a GA product since we're still refining features and design. For an early-adopter end user who is comfortable reading a changelog and is aware that they are using an "in preview" tool that's subject to change, IMO there's nothing wrong with them using images generated by these buildpacks in production - and we welcome the feedback. |
Thanks for the clarification @edmorley. My understanding is that the non-CNB buildpacks are EOL and no longer supported. So there isn't a supported GA option for Python using Heroku builders? |
No, the non-CNB buildpacks (which we've been colloquially calling "classic buildpacks" to differentiate from CNBs) are still supported - and will be for some time, since the Heroku customer migration to CNBs won't happen overnight. (ie: The buildpacks like: https://github.com/heroku/heroku-buildpack-python) However, I believe you might be talking about the experimental "shimmed" CNBs that were bundled in the now-sunset
Not one Heroku CNB or builder image is GA at the moment (or has ever been), regardless of language (this isn't Python specific). This is what was meant above by:
|
Closing this out, since:
|
I've seen numerous builds that were previously working and now fail since v0.14.0 was released with #243
Many have a
requirements.txt
generated usingpip-tools --generate-hashes ...
without using the--allow-unsafe
flag.This results in errors like this at build time:
Some packages have implicit dependencies on
setuptools
. Here's an example of an error I just saw:This removal seems premature given that major projects in the Python ecosystem assume its presence.
The text was updated successfully, but these errors were encountered: