'Building f2py module with numpy.distutils

To build a project managed with poetry I need to build an f2py extension first. I am trying to achieve it with a separate build.py file inspired by this answer. For now my setup.py is:

# In case of numpy, build_ext is a module containing class build_ext
from numpy.distutils.core import Extension, build_ext

ext = Extension(
    'ext_name',
    sources=[<list_of_fortran_sources>],
)

def build(setup_kwargs):
    setup_kwargs.update(
        {"ext_modules": [ext], "cmdclass": {"build_ext": build_ext.build_ext}}
    )

But trying to build it I am getting an error:

>>> poetry build

A setup.py file already exists. Using it.
running build
running build_py
running build_ext
Traceback (most recent call last):
  File "/home/lap1dem/dev-python/iricore/setup.py", line 37, in <module>
    setup(**setup_kwargs)
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/setuptools/__init__.py", line 87, in setup
    return distutils.core.setup(**attrs)
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/setuptools/_distutils/core.py", line 148, in setup
    return run_commands(dist)
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/setuptools/_distutils/core.py", line 163, in run_commands
    dist.run_commands()
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 967, in run_commands
    self.run_command(cmd)
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/setuptools/dist.py", line 1214, in run_command
    super().run_command(command)
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 986, in run_command
    cmd_obj.run()
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/setuptools/_distutils/command/build.py", line 136, in run
    self.run_command(cmd_name)
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/setuptools/_distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/setuptools/dist.py", line 1214, in run_command
    super().run_command(command)
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 985, in run_command
    cmd_obj.ensure_finalized()
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/setuptools/_distutils/cmd.py", line 107, in ensure_finalized
    self.finalize_options()
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/numpy/distutils/command/build_ext.py", line 86, in finalize_options
    self.set_undefined_options('build',
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/setuptools/_distutils/cmd.py", line 290, in set_undefined_options
    setattr(self, dst_option, getattr(src_cmd_obj, src_option))
  File "/home/lap1dem/.cache/pypoetry/virtualenvs/iricore-iDxR-q1V-py3.8/lib/python3.8/site-packages/setuptools/_distutils/cmd.py", line 103, in __getattr__
    raise AttributeError(attr)
AttributeError: warn_error

I have looked into build_ext.py source file, seems like this class is trying to set undefined options, like warn_error, cpu_baseline, cpu_dispatch, etc. in addition to built-in ditutils.command.build_ext. Those additional options should be initialized with the build_ext.initialize_options(), but build_ext.set_undefined_options() fails to find them. It is not clear to me how I can fix it. Am I even on the right track to build the f2py extension?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source