'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 |
|---|
