[Scons-dev] Python 3 issue

Russel Winder russel at winder.org.uk
Fri Jun 23 10:14:00 EDT 2017


Python 3 changed the way imports worked, absolute imports became the
norm. However relative imports were retain via extra syntax. This has,
I believe been backported to Python 2.7.

The summary of the situation is that to enable tools as packages as
well as tools as modules, you have to use relative imports of generate
and exists in __init__.py. This used to work fine. A very minor change
of syntax means it all still works on Python 2. However on Python 3
something weird happens. This is a SCons thing, because if you do the
equivalent it pure Python is works fine with either 2 or 3.

So given the attached project:

> python /home/users/russel/Repositories/Mercurial/Forks/SCons/src/script/scons.py
scons: Reading SConscript files ...
__init__ loaded.
generate called.
scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
scons: done building targets.
546 lavaine:~/Progs/OddsByLanguage/SCons/RelativeImports 
|> python3 /home/users/russel/Repositories/Mercurial/Forks/SCons/src/script/scons.py
scons: Reading SConscript files ...
SystemError: Parent module 'relative' not loaded, cannot perform relative import:
  File "/home/users/russel/Progs/OddsByLanguage/SCons/RelativeImports/SConstruct", line 1:
    env = Environment(tools=['relative'])
  File "/home/users/russel/Repositories/Mercurial/Forks/SCons/src/engine/SCons/Environment.py", line 982:
    apply_tools(self, tools, toolpath)
  File "/home/users/russel/Repositories/Mercurial/Forks/SCons/src/engine/SCons/Environment.py", line 107:
    env.Tool(tool)
  File "/home/users/russel/Repositories/Mercurial/Forks/SCons/src/engine/SCons/Environment.py", line 1788:
    tool = SCons.Tool.Tool(tool, toolpath, **kw)
  File "/home/users/russel/Repositories/Mercurial/Forks/SCons/src/engine/SCons/Tool/__init__.py", line 115:
    module = self._tool_module()
  File "/home/users/russel/Repositories/Mercurial/Forks/SCons/src/engine/SCons/Tool/__init__.py", line 228:
    spec.loader.exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 697:
    
  File "<frozen importlib._bootstrap>", line 222:
    
  File "/home/users/russel/Progs/OddsByLanguage/SCons/RelativeImports/site_scons/site_tools/relative/__init__.py", line 3:
    from .thingy import generate, exists



-- 
Russel.
=============================================================================
Dr Russel Winder      t: +44 20 7585 2200   voip: sip:russel.winder at ekiga.net
41 Buckmaster Road    m: +44 7770 465 077   xmpp: russel at winder.org.uk
London SW11 1EN, UK   w: www.russel.org.uk  skype: russel_winder
-------------- next part --------------
A non-text attachment was scrubbed...
Name: problem_project.zip
Type: application/zip
Size: 1316 bytes
Desc: not available
URL: <https://pairlist2.pair.net/pipermail/scons-dev/attachments/20170623/d2e4c802/attachment.zip>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <https://pairlist2.pair.net/pipermail/scons-dev/attachments/20170623/d2e4c802/attachment.pgp>


More information about the Scons-dev mailing list