python-metrohash
python-metrohash copied to clipboard
Build from tar.gz fails with Cython 3.1.0: "'long' is not a constant, variable or function identifier"
Hi, when I try to (uv) pip install this package from Python 3.12, there is no wheel (see #27) so we build from source. Cython 3.1.0 was released yesterday, so it is now used by default. But building gives this error:
/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/_distutils/dist.py:289: UserWarning: Unknown distribution option:
'tests_require'
warnings.warn(msg)
/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/dist.py:761: SetuptoolsDeprecationWarning: License classifiers
are deprecated.
!!
********************************************************************************
Please consider removing the following classifiers in favor of a SPDX license expression:
License :: OSI Approved :: Apache Software License
See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
********************************************************************************
!!
self._finalize_license_expression()
Error compiling Cython file:
------------------------------------------------------------
...
PyObject_GetBuffer(data, &buf, PyBUF_SIMPLE)
result = c_metrohash128(<const uint8 *>buf.buf, buf.len, seed)
PyBuffer_Release(&buf)
else:
raise _type_error("data", ["basestring", "buffer"], data)
return (long(result.first) << 64ULL) + long(result.second)
^
------------------------------------------------------------
src/metrohash.pyx:253:12: 'long' is not a constant, variable or function identifier
Error compiling Cython file:
------------------------------------------------------------
...
PyObject_GetBuffer(data, &buf, PyBUF_SIMPLE)
result = c_metrohash128(<const uint8 *>buf.buf, buf.len, seed)
PyBuffer_Release(&buf)
else:
raise _type_error("data", ["basestring", "buffer"], data)
return (long(result.first) << 64ULL) + long(result.second)
^
------------------------------------------------------------
src/metrohash.pyx:253:43: 'long' is not a constant, variable or function identifier
Error compiling Cython file:
------------------------------------------------------------
...
:return: a long integer representing 128-bit hash value
"""
cdef uint8 buf[16]
self._m.Finalize(buf)
cdef uint128 result = c_bytes2int128(buf)
return (long(result.first) << 64ULL) + long(result.second)
^
------------------------------------------------------------
src/metrohash.pyx:416:16: 'long' is not a constant, variable or function identifier
Error compiling Cython file:
------------------------------------------------------------
...
:return: a long integer representing 128-bit hash value
"""
cdef uint8 buf[16]
self._m.Finalize(buf)
cdef uint128 result = c_bytes2int128(buf)
return (long(result.first) << 64ULL) + long(result.second)
^
------------------------------------------------------------
src/metrohash.pyx:416:47: 'long' is not a constant, variable or function identifier
Traceback (most recent call last):
File "<string>", line 11, in <module>
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/build_meta.py", line 432, in build_wheel
return _build(['bdist_wheel'])
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/build_meta.py", line 423, in _build
return self._build_with_temp_dir(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/build_meta.py", line 404, in _build_with_temp_dir
self.run_setup()
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/build_meta.py", line 317, in run_setup
exec(code, locals())
File "<string>", line 136, in <module>
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/__init__.py", line 117, in setup
return distutils.core.setup(**attrs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 186, in setup
return run_commands(dist)
^^^^^^^^^^^^^^^^^^
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 202, in run_commands
dist.run_commands()
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 1002, in run_commands
self.run_command(cmd)
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/dist.py", line 1106, in run_command
super().run_command(command)
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 1021, in run_command
cmd_obj.run()
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/command/bdist_wheel.py", line 370, in run
self.run_command("build")
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/_distutils/cmd.py", line 357, in run_command
self.distribution.run_command(command)
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/dist.py", line 1106, in run_command
super().run_command(command)
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 1021, in run_command
cmd_obj.run()
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/_distutils/command/build.py", line 135, in run
self.run_command(cmd_name)
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/_distutils/cmd.py", line 357, in run_command
self.distribution.run_command(command)
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/dist.py", line 1106, in run_command
super().run_command(command)
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 1021, in run_command
cmd_obj.run()
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py", line 368, in run
self.build_extensions()
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py", line 484, in
build_extensions
self._build_extensions_serial()
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py", line 510, in
_build_extensions_serial
self.build_extension(ext)
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/Cython/Distutils/build_ext.py", line 131, in build_extension
new_ext = cythonize(
^^^^^^^^^^
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/Cython/Build/Dependencies.py", line 1145, in cythonize
cythonize_one(*args)
File "/home/admin/.cache/uv/builds-v0/.tmp6tX0y7/lib/python3.12/site-packages/Cython/Build/Dependencies.py", line 1289, in cythonize_one
raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: src/metrohash.pyx
hint: This usually indicates a problem with the package or the build environment.
In case this helps anyone to install metrohash, the workaround we are using is setting UV_BUILD_CONSTRAINT on any environment that needs to install this, its value being a file (local or at a URL) with the following contents:
Cython < 3.1.0
Requires uv >= 0.6.15
It looks like Cython's behaviour is expected, metrohash is using the Python 2 "long", support for which will have been removed.
https://github.com/cython/cython/issues/6857#issuecomment-2867304189
issue now addressed, wheels will be available today