Commit 37cf1383 authored by Carlos Ramos Carreño's avatar Carlos Ramos Carreño Committed by Kirill Smelkov

setup: Allow editable wheels.

When building an editable wheel it is not necessary that
`build_packages` (or even `run`) is called before calling `get_outputs`
(notice the following in
https://setuptools.pypa.io/en/latest/userguide/extension.html#supporting-sdists-and-editable-installs-in-build-sub-commands :
"Please note that custom sub-commands SHOULD NOT rely on `run()` being
executed (or not) to provide correct return values for `get_outputs()`,
`get_output_mapping()` or `get_source_files()`. The `get_*` methods
should work independently of `run().").

Our implementation relied in the call to `build_packages` to set the
name of the synthetic init file.
This commit uses a property of the object instead, to compute that name
whenever it is necessary.
With this change, it is now possible to make editable wheels.

--------
kirr:

Without the fix `pip install -e` fails as follows on py3:

  Traceback (most recent call last):
    File "/home/kirr/src/wendelin/venv/py39.venv/lib/python3.9/site-packages/setuptools/command/editable_wheel.py", line 155, in run
      self._create_wheel_file(bdist_wheel)
    File "/home/kirr/src/wendelin/venv/py39.venv/lib/python3.9/site-packages/setuptools/command/editable_wheel.py", line 357, in _create_wheel_file
      files, mapping = self._run_build_commands(dist_name, unpacked, lib, tmp)
    File "/home/kirr/src/wendelin/venv/py39.venv/lib/python3.9/site-packages/setuptools/command/editable_wheel.py", line 281, in _run_build_commands
      files, mapping = self._collect_build_outputs()
    File "/home/kirr/src/wendelin/venv/py39.venv/lib/python3.9/site-packages/setuptools/command/editable_wheel.py", line 266, in _collect_build_outputs
      files.extend(cmd.get_outputs() or [])
    File "<string>", line 137, in get_outputs
    File "/home/kirr/src/wendelin/venv/py39.venv/lib/python3.9/site-packages/setuptools/command/build_py.py", line 78, in __getattr__
      return orig.build_py.__getattr__(self, attr)
    File "/home/kirr/src/wendelin/venv/py39.venv/lib/python3.9/site-packages/setuptools/_distutils/cmd.py", line 107, in __getattr__
      raise AttributeError(attr)
  AttributeError: initfile

/reviewed-by @kirr
/reviewed-on !25
parent 17deca45
...@@ -120,10 +120,13 @@ class build_py(_build_py): ...@@ -120,10 +120,13 @@ class build_py(_build_py):
return modules return modules
@property
def initfile(self):
return self.get_module_outfile(self.build_lib, ('wendelin',), '__init__')
def build_packages(self): def build_packages(self):
_build_py.build_packages(self) _build_py.build_packages(self)
# emit std namespacing mantra to wendelin/__init__.py # emit std namespacing mantra to wendelin/__init__.py
self.initfile = self.get_module_outfile(self.build_lib, ('wendelin',), '__init__')
with open(self.initfile, 'w') as f: with open(self.initfile, 'w') as f:
f.write("# this is a namespace package (autogenerated)\n") f.write("# this is a namespace package (autogenerated)\n")
f.write("__import__('pkg_resources').declare_namespace(__name__)\n") f.write("__import__('pkg_resources').declare_namespace(__name__)\n")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment