python-metrohash icon indicating copy to clipboard operation
python-metrohash copied to clipboard

Build from tar.gz fails with Cython 3.1.0: "'long' is not a constant, variable or function identifier"

Open tmct opened this issue 6 months ago • 2 comments

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.

tmct avatar May 09 '25 11:05 tmct

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

tmct avatar May 09 '25 15:05 tmct

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

tmct avatar May 09 '25 17:05 tmct

issue now addressed, wheels will be available today

escherba avatar Aug 02 '25 21:08 escherba