Re: Python 3 issue

RW via Scons-dev <[email protected]>
Newsgroups gmane.comp.programming.tools.scons.devel
Message-ID <CAMMCZ5Oozwc9c4+Z2vtECv20ph7ZU3qqSxJrX7o3mqX+njyHKg@mail.gmail.com>
Just to comment on this one
it looks like others have had the same problem as well
https://github.com/datafolklabs/cement/issues/386
https://stackoverflow.com/questions/38802908/importing-module-with-current-directory-imports

I suspect this might be a wider issue with python not supporting relative
imports when using exec_module from importlib

To simplify the problem a bit without hacking scons I tried creating a
small lump of code within site_scons\site_tools (of the example code posted
so far) to see if there's a workaround. Not managed to find one so far


test1.py
```
import os
import importlib.util

#import relative

def path_import(absolute_path):
   '''implementation taken from
https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly'
''
   spec = importlib.util.spec_from_file_location(absolute_path,
absolute_path)
   module = importlib.util.module_from_spec(spec)
   spec.loader.exec_module(module)
   return module

def main():
    root = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
    modpath = os.path.join(root, 'relative', '__init__.py')
    print(modpath)
    path_import(modpath)

if __name__ == '__main__':
    main()
```


On 23 June 2017 at 19:03, Bill Deegan <bill-cJFiu+DHMVC5azolltMz9laTQe2KTcn/@public.gmane.org> wrote:

> O.k so relative imports should work with both py3 and py2, but likely our
> tool import logic is breaking it with py3.
> (the logic is different for py3 https://bitbucket.org/scons/scons/src/
> e2d9abca56a519930e5846a3634c85074fcbba47/src/engine/SCons/
> Tool/__init__.py?at=default&fileviewer=file-view-default#__init__.py-164)
>
>
> Can we live with absolute imports until we resolve the issue?
>
> -Bill
>
> On Fri, Jun 23, 2017 at 10:53 AM, Bill Deegan <bill-cJFiu+DHMVC5azolltMz9laTQe2KTcn/@public.gmane.org>
> wrote:
>
>> This change:
>> https://bitbucket.org/bdbaddog/scons-russel-example/commits/
>> 48899a710f9afbec891307addd6ae5b9c08d53c9?at=master
>>
>> Will make it work in py2 and py3.
>>
>> Any reason we can't live with that?
>>
>> -Bill
>>
>> On Fri, Jun 23, 2017 at 10:38 AM, Bill Deegan <bill-cJFiu+DHMVC5azolltMz9laTQe2KTcn/@public.gmane.org>
>> wrote:
>>
>>> Russel,
>>>
>>> I've created a git repo in bitbucket to facilitate talking about this
>>> issue.
>>>
>>> https://bitbucket.org/bdbaddog/scons-russel-example
>>>
>>> And given you permissions.
>>> The second commit should be the same as your zip file.
>>> Going forward, it's far easier to create a throwaway repo and share it
>>> than to pass zip files back and forth..
>>>
>>> -Bill
>>>
>>>
>>> On Fri, Jun 23, 2017 at 7:14 AM, Russel Winder <[email protected]>
>>> wrote:
>>>
>>>> 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/sc
>>>> ript/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/sc
>>>> ript/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/RelativeImpor
>>>> ts/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:[email protected]
>>>> 41 Buckmaster Road    m: +44 7770 465 077   xmpp: [email protected]
>>>> London SW11 1EN, UK   w: www.russel.org.uk  skype: russel_winder
>>>> _______________________________________________
>>>> Scons-dev mailing list
>>>> [email protected]
>>>> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>>>>
>>>>
>>>
>>
>
> _______________________________________________
> Scons-dev mailing list
> [email protected]
> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>
>

_______________________________________________
Scons-dev mailing list
[email protected]
https://pairlist2.pair.net/mailman/listinfo/scons-dev
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.