jcrist / msgspec

A fast serialization and validation library, with builtin support for JSON, MessagePack, YAML, and TOML
https://jcristharif.com/msgspec/
BSD 3-Clause "New" or "Revised" License
2.43k stars 75 forks source link

3.13 support #698

Closed Tinche closed 1 month ago

Tinche commented 5 months ago

Howdy!

I'm trying to test cattrs on Python 3.13 (beta1). I've added a msgspec converter in the next version so now we optionally depend on msgspec, which means I can't test on 3.13 until you support it. ;)

The installation seems to be failing in GCC: https://github.com/python-attrs/cattrs/actions/runs/9333591881/job/25690767935

msgspec/_core.c:11254:15: error: too few arguments to function 
  ‘_PyLong_AsByteArray’
  11254 |     int out = _PyLong_AsByteArray((PyLongObject *)int128, buf, 16, 0, 
  0);
        |               ^~~~~~~~~~~~~~~~~~~
  In file included from 
  /opt/hostedtoolcache/Python/3.13.0-beta.1/x64/include/python3.13/longobject.h:10
  7,
                   from 
  /opt/hostedtoolcache/Python/3.13.0-beta.1/x64/include/python3.13/Python.h:72,
                   from msgspec/_core.c:9:
  /opt/hostedtoolcache/Python/3.13.0-beta.1/x64/include/python3.13/cpython/longobj
  ect.h:99:17: note: declared here
     99 | PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v,
        |                 ^~~~~~~~~~~~~~~~~~~
  error: command '/usr/bin/gcc' failed with exit code 1
max-muoto commented 5 months ago

@jcrist Put up a PR attempting to fix this if you can run the CI pipeline: https://github.com/jcrist/msgspec/pull/703

mgorny commented 4 months ago

With that PR applied (and fixed locally), I'm getting another error (with 3.13.0b3):

2024-07-12 20:56:32,621 root INFO x86_64-pc-linux-gnu-gcc -fno-strict-overflow -Wsign-compare -march=znver2 --param=l1-cache-size=32 --
param=l1-cache-line-size=64 -O2 -pipe -frecord-gcc-switches -UNDEBUG -fPIC -I/usr/include/python3.13 -c msgspec/_core.c -o /tmp/portage
/dev-python/msgspec-0.18.6/work/msgspec-0.18.6-python3_13/build/temp.linux-x86_64-cpython-313/msgspec/_core.o
msgspec/_core.c: In function ‘find_keyword’:
msgspec/_core.c:501:13: error: implicit declaration of function ‘_PyUnicode_EQ’; did you mean ‘PyUnicode_New’? [-Wimplicit-function-dec
laration]
  501 |         if (_PyUnicode_EQ(kwname, key)) {
      |             ^~~~~~~~~~~~~
      |             PyUnicode_New
msgspec/_core.c: In function ‘typenode_collect_convert_structs’:
msgspec/_core.c:4453:12: error: implicit declaration of function ‘_PySet_NextEntry’ [-Wimplicit-function-declaration]
 4453 |     while (_PySet_NextEntry(state->structs_set, &set_pos, &set_item, &set_hash)) {
      |            ^~~~~~~~~~~~~~~~
error: command '/usr/lib/ccache/bin/x86_64-pc-linux-gnu-gcc' failed with exit code 1
rosset commented 3 months ago

fails to build with Python 3.13.0rc1 (Fedora)

copying msgspec/py.typed -> build/lib.linux-x86_64-cpython-313/msgspec UPDATING build/lib.linux-x86_64-cpython-313/msgspec/_version.py set build/lib.linux-x86_64-cpython-313/msgspec/_version.py to '0.18.6' running build_ext building 'msgspec._core' extension creating build/temp.linux-x86_64-cpython-313 creating build/temp.linux-x86_64-cpython-313/msgspec gcc -fno-strict-overflow -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -fcf-protection -fexceptions -fcf-protection -fexceptions -fcf-protection -fexceptions -O3 -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -I/usr/include/python3.13 -c msgspec/_core.c -o build/temp.linux-x86_64-cpython-313/msgspec/_core.o msgspec/_core.c: In function ‘find_keyword’: msgspec/_core.c:500:13: error: implicit declaration of function ‘_PyUnicode_EQ’; did you mean ‘PyUnicode_New’? [-Wimplicit-function-declaration] 500 | if (_PyUnicode_EQ(kwname, key)) { | ^~~~~ | PyUnicode_New msgspec/_core.c: In function ‘typenode_collect_convert_structs’: msgspec/_core.c:4452:12: error: implicit declaration of function ‘_PySet_NextEntry’ [-Wimplicit-function-declaration] 4452 | while (_PySet_NextEntry(state->structs_set, &set_pos, &set_item, &set_hash)) { | ^~~~ msgspec/_core.c: In function ‘ms_uuid_to_16_bytes’: msgspec/_core.c:11254:15: error: too few arguments to function ‘_PyLong_AsByteArray’ 11254 | int out = _PyLong_AsByteArray((PyLongObject )int128, buf, 16, 0, 0); | ^~~~~~~ In file included from /usr/include/python3.13/longobject.h:107, from /usr/include/python3.13/Python.h:77, from msgspec/_core.c:9: /usr/include/python3.13/cpython/longobject.h:111:17: note: declared here 111 | PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject v, | ^~~~~~~ error: command '/usr/lib64/ccache/gcc' failed with exit code 1 error: subprocess-exited-with-error

× Building wheel for msgspec (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip. Building wheel for msgspec (pyproject.toml): finished with status 'error' Failed to build msgspec full command: /usr/bin/python3 /usr/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py build_wheel /builddir/build/BUILD/python-msgspec-0.18.6-build/msgspec-0.18.6/.pyproject-builddir/tmpan89ffv8 cwd: /builddir/build/BUILD/python-msgspec-0.18.6-build/msgspec-0.18.6 ERROR: Failed building wheel for msgspec ERROR: Failed to build one or more wheels

edgarrmondragon commented 3 months ago

@rosset can you give #711 a try?

ofek commented 2 months ago

Has there been any progress on this?

mgorny commented 2 months ago

I can confirm that with #711 as it is now, I can get it to build successfully and pass all tests on 3.13.0rc2.

marvin8 commented 1 month ago

Do you plan on releasing a new version or should this fix work without needing a new release?

edgarrmondragon commented 1 month ago

Do you plan on releasing a new version or should this fix work without needing a new release?

@marvin8 You can use the fix in #711 already by installing from GitHub:

pip install git+https://github.com/jcrist/msgspec.git@main
marvin8 commented 1 month ago

Thank you... not really what I was asking though. :smile:

I'll wait for your next release then.

Tishka17 commented 1 week ago

Any chances?