Hi, I'm having an error I don't understand about w...
# general
r
Hi, I'm having an error I don't understand about wheels. Yesterday, sqlalchemy released a new point-fix version,
2.0.45
. Pants (probably actually
pex
) reported
No pre-built wheel was available for SQLAlchemy 2.0.45. Successfully built the wheel sqlalchemy-2.0.45-cp311-cp311-macosx_11_0_arm64.whl from the sdist sqlalchemy-2.0.45.tar.gz but it is not compatible with the requested foreign target complete platform cp312-cp312-manylinux_2_36_x86_64.
But sqlalchemy has what this is apparently looking for, or at least a previous clib version: sqlalchemy-2.0.45-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl. The previous version, which worked, had an even earlier clib version: sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl. My
gcloud-platfrom.json
has the `"cp312-cp312-manylinux_2_36_x86_64",
Copy code
as the first compatible tag, but has tags for 2_28 and 2_17 as well.  So I think it *should* work.

When I switch on
-ldebug`, I see the args to pex (I think) have the following odd-looking args:
"--no-pypi", "--index=<https://pypi.org/simple/>"
. We also are using
--find-link
with our own storage, but none of this has been a problem in the past. I've worked around the issue by just using the old version of sqlalchemy, but I'd like to understand what is going wrong.
Strangely, adding more tags, tags which don't really match the sqlalchemy wheel, does work, so now my first tag in that file is:
cp312-cp312-manylinux_2_39_x86_64
. Why this works is a mystery to me.
b
@refined-cat-61929 can you provide your original complete platform file as well as how you created that file? I should be able to debug from there.
r
Thanks @brief-scientist-13682. My original file is [here](https://gist.github.com/ahyatt-continua/b747cd73dce147d88873cd5b3a2bca75). How I created it I no longer remember, but it was probably whatever was recommended given our target platform
linux/amd64
.
b
Ok, thanks. The only correct way to generate it is described here: https://docs.pex-tool.org/buildingpex.html?highlight=completeplatform#complete-platform Basically run
pex3 interpreter inspect --markers --tags
on the foreign machine.
Your complete platform looks legit; so I'll see if I can repro tomorrow night.
❤️ 1
@refined-cat-61929 I do not repro:
Copy code
:; pex -V
2.74.1

:; pex --complete-platform ~/support/pex/slack/12-11-2025/complete-platform.json SQLAlchemy==2.0.45
Pex 2.74.1 ephemeral hermetic environment with 1 requirement and 3 activated distributions.
Python 3.12.12 (main, Oct  9 2025, 22:14:31) [GCC 15.2.0] on linux
Type "help", "pex", "copyright", "credits" or "license" for more information.
>>> import sqlalchemy
>>> sqlalchemy.__file__
'/home/jsirois/.cache/pex/installed_wheels/2/ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d/sqlalchemy-2.0.45-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl/sqlalchemy/__init__.py'
>>>
I don't know what Pants is doing, but Pex seems to handle this fine. You were vague with your details above re:
-ldebug
. Can you provide full output so I can see exactly what Pex call Pants is making?
r
Thanks, I appreciate the attempt at a repro. I just put my repo in the state before I change the
gcloud-platform.json
but this time it worked. Maybe something changed in the world to make the issue go away, such as new wheels?
b
Well, https://pypi.org/project/SQLAlchemy/#files has timestamps. All the wheels shown there were uploaded on Dec 9th. How does that intersect with your error timing @refined-cat-61929?
Actually, I lied. Looks like mac arm wheels were uploaded later, on the 10th, but your issue was with Linux wheels anyhow.
r
I wonder if those mac arm wheels did solve the issue somehow, although in theory they shouldn't. Our problem did go away on the 10th, I thought because I changed the
gcloud-platform.json
, but that also doesn't make sense - our changes to that file, just adding new versions that are above and beyond what clib versions the sqlalchemy builds were for, which was necessary to fix a real issue for building on Macs, but shouldn't be necessary for the linux version AFAICT. However, it did actually fix the issue, and now that I reverted that fix, the issue is still fixed, meaning something else must have changed.
b
@refined-cat-61929 without a timestamp for your error and the result of the hand edit - basically crisp details, I'm inclined to point to the sqlalchemy release job being borked that day and delayed appearance of wheels as a result, both Linux and Mac, as the likely culprit: https://github.com/sqlalchemy/sqlalchemy/actions/runs/20078488011 If you want to dig, here's the fine upload data:
Copy code
:; curl -sSL <https://pypi.org/pypi/SQLAlchemy/2.0.45/json> | jq '.urls[] | {filename:.filename,upload_time:.upload_time_iso_8601}'
{
  "filename": "sqlalchemy-2.0.45-cp310-cp310-macosx_11_0_arm64.whl",
  "upload_time": "2025-12-10T20:03:21.023948Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
  "upload_time": "2025-12-09T22:06:04.768302Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
  "upload_time": "2025-12-09T22:09:54.435720Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp310-cp310-musllinux_1_2_aarch64.whl",
  "upload_time": "2025-12-09T22:06:06.169412Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp310-cp310-musllinux_1_2_x86_64.whl",
  "upload_time": "2025-12-09T22:09:55.969008Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp310-cp310-win32.whl",
  "upload_time": "2025-12-09T21:29:54.007165Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp310-cp310-win_amd64.whl",
  "upload_time": "2025-12-09T21:29:55.850882Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp311-cp311-macosx_11_0_arm64.whl",
  "upload_time": "2025-12-10T20:03:23.843328Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
  "upload_time": "2025-12-09T22:06:07.461125Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
  "upload_time": "2025-12-09T22:09:57.643514Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp311-cp311-musllinux_1_2_aarch64.whl",
  "upload_time": "2025-12-09T22:06:08.879940Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp311-cp311-musllinux_1_2_x86_64.whl",
  "upload_time": "2025-12-09T22:09:59.454607Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp311-cp311-win32.whl",
  "upload_time": "2025-12-09T21:29:57.030481Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp311-cp311-win_amd64.whl",
  "upload_time": "2025-12-09T21:29:58.556271Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
  "upload_time": "2025-12-09T22:11:02.660461Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
  "upload_time": "2025-12-09T22:13:49.054901Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp312-cp312-musllinux_1_2_aarch64.whl",
  "upload_time": "2025-12-09T22:11:04.140714Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp312-cp312-musllinux_1_2_x86_64.whl",
  "upload_time": "2025-12-09T22:13:50.598916Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp312-cp312-win32.whl",
  "upload_time": "2025-12-09T21:39:30.824640Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp312-cp312-win_amd64.whl",
  "upload_time": "2025-12-09T21:39:32.321282Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
  "upload_time": "2025-12-09T22:11:06.167760Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
  "upload_time": "2025-12-09T22:13:52.626311Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp313-cp313-musllinux_1_2_aarch64.whl",
  "upload_time": "2025-12-09T22:11:08.093727Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp313-cp313-musllinux_1_2_x86_64.whl",
  "upload_time": "2025-12-09T22:13:54.262486Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
  "upload_time": "2025-12-09T22:13:28.622532Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp313-cp313t-musllinux_1_2_x86_64.whl",
  "upload_time": "2025-12-09T22:13:30.188456Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp313-cp313-win32.whl",
  "upload_time": "2025-12-09T21:39:33.486247Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp313-cp313-win_amd64.whl",
  "upload_time": "2025-12-09T21:39:36.801221Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
  "upload_time": "2025-12-09T22:11:09.662250Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
  "upload_time": "2025-12-09T22:13:56.213334Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp314-cp314-musllinux_1_2_aarch64.whl",
  "upload_time": "2025-12-09T22:11:11.100469Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp314-cp314-musllinux_1_2_x86_64.whl",
  "upload_time": "2025-12-09T22:13:57.932417Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
  "upload_time": "2025-12-09T22:13:32.090091Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp314-cp314t-musllinux_1_2_x86_64.whl",
  "upload_time": "2025-12-09T22:13:33.739402Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp314-cp314-win32.whl",
  "upload_time": "2025-12-09T21:39:38.365457Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp314-cp314-win_amd64.whl",
  "upload_time": "2025-12-09T21:39:39.503317Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp38-cp38-macosx_11_0_arm64.whl",
  "upload_time": "2025-12-10T20:05:12.527165Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
  "upload_time": "2025-12-09T22:06:52.799563Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
  "upload_time": "2025-12-09T22:09:57.698375Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp38-cp38-musllinux_1_2_aarch64.whl",
  "upload_time": "2025-12-09T22:06:54.119667Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp38-cp38-musllinux_1_2_x86_64.whl",
  "upload_time": "2025-12-09T22:10:00.550783Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp38-cp38-win32.whl",
  "upload_time": "2025-12-09T22:09:14.627579Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp38-cp38-win_amd64.whl",
  "upload_time": "2025-12-09T22:09:15.826311Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp39-cp39-macosx_11_0_arm64.whl",
  "upload_time": "2025-12-10T20:05:13.998781Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
  "upload_time": "2025-12-09T22:06:55.420304Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
  "upload_time": "2025-12-09T22:10:03.143613Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp39-cp39-musllinux_1_2_aarch64.whl",
  "upload_time": "2025-12-09T22:06:56.894987Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp39-cp39-musllinux_1_2_x86_64.whl",
  "upload_time": "2025-12-09T22:10:04.812332Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp39-cp39-win32.whl",
  "upload_time": "2025-12-09T22:09:17.012443Z"
}
{
  "filename": "sqlalchemy-2.0.45-cp39-cp39-win_amd64.whl",
  "upload_time": "2025-12-09T22:09:18.545897Z"
}
{
  "filename": "sqlalchemy-2.0.45-py3-none-any.whl",
  "upload_time": "2025-12-09T21:54:52.608528Z"
}
{
  "filename": "sqlalchemy-2.0.45.tar.gz",
  "upload_time": "2025-12-09T21:05:16.737380Z"
}
r
That's very helpful, thank you
b
In general, if you're going to do a locky / resolvy thing across platforms right when someone releases; that is a likely source of issues.
r
Let me at least record the relevant timestamps in case it turns out to be important here:
b
There has been talk in PyPA discourse in the past about having atomic releases supported by PyPI but the idea has been rejected IIRC. Folk view it as important to be able to add artifacts later as I recall.
👍 1
r
The issue happened when the new sqlalchemy version came out, which was Dec 9th. I noticed things being fixed at around 3 PM Dec 10th, EST.
Whether the fix was the result of my editing the
gcloud-platform.json
or not is still unknown, but my edit occurred around 3 PM as well.
b
As you said, that makes no sense though. If we're talking about:
Successfully built the wheel sqlalchemy-2.0.45-cp311-cp311-macosx_11_0_arm64.whl from the sdist sqlalchemy-2.0.45.tar.gz but it is not compatible with the requested foreign target complete platform cp312-cp312-manylinux_2_36_x86_64.
That's a "YOLO mode" last ditch attempt to build a whl from source in the hopes you're on the same platform. Here, you were not. You were on Mac bare metal but were targeting Linux. No amount of tag adding to the complete platform - unless you did something crazy like add mac tags to a linux complete platform, would make the resolve succeed. If you did add mac tags, then the resolve would succeed, but then later use would fail, since a mac platform specific whl will never work on Linux.
I had not considered the complete platform edits (which you should never do!), were maybe adding mac tags to a linux complete platform. That would explain everything. Is that what happened @refined-cat-61929?
r
No, it was all linux.
b
Ok, clear as mud then. I'll beg off further debugging unless you can provide a lot more fine detail.
r
No problem, I appreciate the help. It's resolved somehow, so hopefully it's some issue we'll never have to deal with again.