mobiusklein / ms_deisotope

A library for deisotoping and charge state deconvolution of complex mass spectra

Home Page:https://mobiusklein.github.io/ms_deisotope

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Can't build ms_deisotope on 32-bit Python

joewandy opened this issue · comments

ms_deisotope depends on brain-isotopic-distribution, and ms_peak_picker. However we have a problem building ms_peak_picker.

We are using Python v3.8.10 32-bit running on Windows 7. I understand that a prebuilt wheel is available for 64-bit Python? Unfortunately for various reasons, we can only use 32-bit Python on this machine.

I'm using Poetry to manage my virtual environment. Here's a minimal pyproject.toml file that I used to set up the virtual environment with Poetry:

[tool.poetry]
name = "vimms-fusion"
version = "2.0.0"
description = ""
authors = ["Joe Wandy <joewandy@gmail.com>"]
readme = "README.md"
packages = [{include = "vimms_fusion"}]

[tool.poetry.dependencies]
python = ">3.8,<3.12"
ms-peak-picker = "*"
brain-isotopic-distribution = "*"
ms-deisotope = "*"
numpy = "*"
scipy = { url = "https://download.lfd.uci.edu/pythonlibs/archived/SciPy-1.8.1-cp38-cp38-win32.whl" }

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

And we get this error when doing poetry install:

Updating dependencies
Resolving dependencies... (0.5s)

Package operations: 4 installs, 0 updates, 0 removals

  • Installing numpy (1.24.4)
  • Installing scipy (1.8.1 https://download.lfd.uci.edu/pythonlibs/archived/SciPy-1.8.1-cp38-cp38-win32.whl)
  • Installing six (1.16.0)
  • Installing ms-peak-picker (0.1.41): Failed

  ChefBuildError

  Backend subprocess exited when trying to invoke get_requires_for_build_wheel

  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\double_vector.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\fft_patterson_charge_state.pyx
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\fticr_denoising.pyx
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\interval_t_vector.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  warning: src\ms_peak_picker\_c\interval_t_vector.pyx:68:0: The 'DEF' statement is deprecated and will be removed in a future Cython version. Consider using global variables, constants, and in-place literals instead. See https://github.com/cython/cython/issues/4310
  warning: src\ms_peak_picker\_c\interval_t_vector.pyx:69:0: The 'DEF' statement is deprecated and will be removed in a future Cython version. Consider using global variables, constants, and in-place literals instead. See https://github.com/cython/cython/issues/4310
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\peak_index.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\peak_picker.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\peak_set.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\peak_statistics.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  warning: src\ms_peak_picker\_c\peak_statistics.pyx:726:0: The 'DEF' statement is deprecated and will be removed in a future Cython version. Consider using global variables, constants, and in-place literals instead. See https://github.com/cython/cython/issues/4310
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\scan_averaging.pyx
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\search.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\size_t_vector.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  warning: src\ms_peak_picker\_c\size_t_vector.pyx:43:0: The 'DEF' statement is deprecated and will be removed in a future Cython version. Consider using global variables, constants, and in-place literals instead. See https://github.com/cython/cython/issues/4310
  warning: src\ms_peak_picker\_c\size_t_vector.pyx:44:0: The 'DEF' statement is deprecated and will be removed in a future Cython version. Consider using global variables, constants, and in-place literals instead. See https://github.com/cython/cython/issues/4310

  Error compiling Cython file:
  ------------------------------------------------------------
  ...
          PyObject_Free(info.shape)


      cpdef void qsort(self, bint reverse=False) nogil:
          if reverse:
              qsort(self.get_data(), self.size(), sizeof(size_t), compare_value_size_t_reverse)
                                                                  ^
  ------------------------------------------------------------

  src\ms_peak_picker\_c\size_t_vector.pyx:331:64: Cannot assign type 'int (const void *, const void *) except? -1 nogil' to 'int (*)(void *, void *) noexcept nogil'

  Error compiling Cython file:
  ------------------------------------------------------------
  ...

      cpdef void qsort(self, bint reverse=False) nogil:
          if reverse:
              qsort(self.get_data(), self.size(), sizeof(size_t), compare_value_size_t_reverse)
          else:
              qsort(self.get_data(), self.size(), sizeof(size_t), compare_value_size_t)
                                                                  ^
  ------------------------------------------------------------

  src\ms_peak_picker\_c\size_t_vector.pyx:333:64: Cannot assign type 'int (const void *, const void *) except? -1 nogil' to 'int (*)(void *, void *) noexcept nogil'
  Traceback (most recent call last):
    File "<string>", line 235, in <module>
    File "<string>", line 213, in run_setup
    File "<string>", line 82, in make_cextensions
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Build\Dependencies.py", line 1134, in cythonize
      cythonize_one(*args)
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Build\Dependencies.py", line 1301, in cythonize_one
      raise CompileError(None, pyx_file)
  Cython.Compiler.Errors.CompileError: src/ms_peak_picker/_c/size_t_vector.pyx
  Building with OpenMP? True
  Version is: '0.1.41'
  Using Directives {'embedsignature': True, 'profile': False}
  Compiling src/ms_peak_picker/_c/peak_statistics.pyx because it changed.
  Compiling src/ms_peak_picker/_c/peak_set.pyx because it changed.
  Compiling src/ms_peak_picker/_c/fft_patterson_charge_state.pyx because it changed.
  Compiling src/ms_peak_picker/_c/search.pyx because it changed.
  Compiling src/ms_peak_picker/_c/peak_index.pyx because it changed.
  Compiling src/ms_peak_picker/_c/double_vector.pyx because it changed.
  Compiling src/ms_peak_picker/_c/size_t_vector.pyx because it changed.
  Compiling src/ms_peak_picker/_c/interval_t_vector.pyx because it changed.
  Compiling src/ms_peak_picker/_c/smoother.pyx because it changed.
  Compiling src/ms_peak_picker/_c/scan_averaging.pyx because it changed.
  Compiling src/ms_peak_picker/_c/fticr_denoising.pyx because it changed.
  Compiling src/ms_peak_picker/_c/peak_picker.pyx because it changed.
  [ 1/12] Cythonizing src/ms_peak_picker/_c/double_vector.pyx
  [ 2/12] Cythonizing src/ms_peak_picker/_c/fft_patterson_charge_state.pyx
  [ 3/12] Cythonizing src/ms_peak_picker/_c/fticr_denoising.pyx
  [ 4/12] Cythonizing src/ms_peak_picker/_c/interval_t_vector.pyx
  [ 5/12] Cythonizing src/ms_peak_picker/_c/peak_index.pyx
  [ 6/12] Cythonizing src/ms_peak_picker/_c/peak_picker.pyx
  [ 7/12] Cythonizing src/ms_peak_picker/_c/peak_set.pyx
  [ 8/12] Cythonizing src/ms_peak_picker/_c/peak_statistics.pyx
  [ 9/12] Cythonizing src/ms_peak_picker/_c/scan_averaging.pyx
  [10/12] Cythonizing src/ms_peak_picker/_c/search.pyx
  [11/12] Cythonizing src/ms_peak_picker/_c/size_t_vector.pyx
  Traceback (most recent call last):
    File "C:\Users\joewa\AppData\Roaming\pypoetry\venv\lib\site-packages\pyproject_hooks\_in_process\_in_process.py", line 353, in <module>
      main()
    File "C:\Users\joewa\AppData\Roaming\pypoetry\venv\lib\site-packages\pyproject_hooks\_in_process\_in_process.py", line 335, in main
      json_out['return_val'] = hook(**hook_input['kwargs'])
    File "C:\Users\joewa\AppData\Roaming\pypoetry\venv\lib\site-packages\pyproject_hooks\_in_process\_in_process.py", line 118, in get_requires_for_build_wheel
      return hook(config_settings)
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\setuptools\build_meta.py", line 341, in get_requires_for_build_wheel
      return self._get_build_requires(config_settings, requirements=['wheel'])
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\setuptools\build_meta.py", line 323, in _get_build_requires
      self.run_setup()
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\setuptools\build_meta.py", line 487, in run_setup
      super(_BuildMetaLegacyBackend,
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\setuptools\build_meta.py", line 338, in run_setup
      exec(code, locals())
    File "<string>", line 235, in <module>
    File "<string>", line 213, in run_setup
    File "<string>", line 82, in make_cextensions
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Build\Dependencies.py", line 1134, in cythonize
      cythonize_one(*args)
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Build\Dependencies.py", line 1301, in cythonize_one
      raise CompileError(None, pyx_file)
  Cython.Compiler.Errors.CompileError: src/ms_peak_picker/_c/size_t_vector.pyx


  at ~\AppData\Roaming\pypoetry\venv\lib\site-packages\poetry\installation\chef.py:147 in _prepare
      143│
      144│                 error = ChefBuildError("\n\n".join(message_parts))
      145│
      146│             if error is not None:
    → 147│                 raise error from None
      148│
      149│             return path
      150│
      151│     def _prepare_sdist(self, archive: Path, destination: Path | None = None) -> Path:

Note: This error originates from the build backend, and is likely not a problem with poetry but with ms-peak-picker (0.1.41) not supporting PEP 517 builds. You can verify this by running 'pip wheel --use-pep517 "ms-peak-picker (==0.1.41)"'.

This problem doesn't occur when I tested on Python v3.8.10 64-bit, so I'm thinking the above compilation error is specific to 32-bit Python. Any help or advice on how to fix this would be appreciated. Thanks a million!

This error is due to ms_peak_picker not yet being updated to work with Cython 3. There is now a new version of ms_peak_picker is now available on PyPI that Cython 3 will compile, please try again and let me know if another error occurs.

I would expect that the code written here would still work on 32-bit systems.

Received confirmation this is closed by email.