[Lldb-commits] [lldb] r265461 - XFail TestImport.py on Windows because Python 3 import rules don't work that way.

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Wed Apr 6 08:46:38 PDT 2016


BTW, the same test fails on our windows->android buildbot (which still
uses python 2). I haven't investigated the issue yet, I'm writing it
just as an additional data point...

cheers,
pl

On 6 April 2016 at 16:19, Zachary Turner via lldb-commits
<lldb-commits at lists.llvm.org> wrote:
> Well, it would belong anywhere that does an import, so in theory it belongs
> in every script.  In the general case, for example if you are like this:
>
> foo
> |-- bar
> |---- baz
> |------ biz.py
>
> And you are in foo and you want to import biz.py, you could do "from bar.baz
> import biz".  So you just get the relative path (bar/baz/biz.py), split the
> filename / path and remove the extension {bar/baz, biz}, replace / with .
> and construct your import statement that way.  That's if you're generating a
> script to run.  Which I still think is an odd thing to do, since we could
> just run Python C API calls directly which do the right things.
>
> On Wed, Apr 6, 2016 at 7:53 AM Adrian McCarthy <amccarth at google.com> wrote:
>>
>> It will still be a bit of a trick to change the `command script import`
>> handling to do `from foo import blah` in the general case, since foo can't
>> really be an absolute file path.
>>
>> And does the `from __future__ import absolute_import` really belong in the
>> script your importing?  Or does it belong in the temp script that's written
>> to do the import?  I would have thought the latter from everything I read
>> yesterday.
>>
>> On Tue, Apr 5, 2016 at 6:29 PM, Zachary Turner <zturner at google.com> wrote:
>>>
>>> Afaik there's no way to do from future imports with the c api, and
>>> executing the statement with RunOneLine doesn't do it either, it has to be
>>> in the script because it's treated specially by the interpreter.
>>>
>>> There might be a way to do it with some tricks that I didn't figure out
>>> last time.
>>>
>>> If its any consolation, it would only be needed for shared/builtin
>>> formatters.
>>>
>>> I guess it would help to get a better understanding of what the problem
>>> is, if someone files a bug against me (or i can file it myself tomorrow) i
>>> can investigate after I finish PDB stuff.
>>>
>>> In the meantime having it in seems like the best option imo
>>>
>>> On Tue, Apr 5, 2016 at 5:54 PM Jim Ingham <jingham at apple.com> wrote:
>>>>
>>>> Will this be necessary for everybody who uses "command script import"
>>>> with Python 3?  If so, it would be really nice to do this work in "command
>>>> script import" if possible.  Otherwise everybody will have to put this goo
>>>> at the top of every .py file they write for formatters & breakpoint commands
>>>> and the like.
>>>>
>>>> Jim
>>>>
>>>>
>>>> > On Apr 5, 2016, at 5:30 PM, Zachary Turner via lldb-commits
>>>> > <lldb-commits at lists.llvm.org> wrote:
>>>> >
>>>> > Yea I wasn't sure if the . would be necessary or not.  If you write
>>>> > "from __future__ import absolute_import" at the top of each of these python
>>>> > files (foo.py and foo2.py or whatever they're called) then this should
>>>> > guarantee that the behavior is the same in both Python 2 and Python 3
>>>> >
>>>> > On Tue, Apr 5, 2016 at 4:01 PM Adrian McCarthy <amccarth at google.com>
>>>> > wrote:
>>>> > "error: module importing failed: Parent module '' not loaded, cannot
>>>> > perform relative import"
>>>> >
>>>> > If you omit the dot (i.e., `from foo import foo2`), it appears to
>>>> > work, but I'm not sure that does the right thing.  I'll keep investigating.
>>>> >
>>>> > On Tue, Apr 5, 2016 at 3:40 PM, Zachary Turner <zturner at google.com>
>>>> > wrote:
>>>> > Without the modification to sys.path
>>>> >
>>>> > On Tue, Apr 5, 2016 at 3:39 PM Zachary Turner <zturner at google.com>
>>>> > wrote:
>>>> > Can you try to change "import foo2" to "from .foo import foo2"
>>>> > On Tue, Apr 5, 2016 at 2:52 PM Adrian McCarthy <amccarth at google.com>
>>>> > wrote:
>>>> > I've drilled down into the Python import statement.  It's in
>>>> > ScriptInterpreterPython::LoadScriptingModule.  The function inserts the
>>>> > diretory into sys.path and then issues a vanilla Python import statement.
>>>> >
>>>> > I spoke with one of our local Python experts who said that this
>>>> > technique to specify the directory is probably unreliable, as the rules for
>>>> > where Python looks for modules has evolved.  The rules for both relative and
>>>> > absolute module paths changed from Python 2 to 3.
>>>> >
>>>> > I'll revert the xfail if you want.  But this has been broken for quite
>>>> > a while (as has another test, which I'm looking into now).
>>>> >
>>>> > On Tue, Apr 5, 2016 at 2:29 PM, Zachary Turner <zturner at google.com>
>>>> > wrote:
>>>> > I think we need some more information before we xfail this. It would
>>>> > help to drill down to either the python import statement or the
>>>> > PyImport_ImportModule C api call that actually does the import.
>>>> >
>>>> > If you can get that, i can help come up with a fix. Just need to step
>>>> > through the execution of the command until you get to the python or c code
>>>> > that tries to do the import
>>>> >
>>>> > On Tue, Apr 5, 2016 at 1:54 PM Adrian McCarthy via lldb-commits
>>>> > <lldb-commits at lists.llvm.org> wrote:
>>>> > Author: amccarth
>>>> > Date: Tue Apr  5 15:49:09 2016
>>>> > New Revision: 265461
>>>> >
>>>> > URL: http://llvm.org/viewvc/llvm-project?rev=265461&view=rev
>>>> > Log:
>>>> > XFail TestImport.py on Windows because Python 3 import rules don't
>>>> > work that way.
>>>> >
>>>> > Modified:
>>>> >
>>>> > lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script/import/TestImport.py
>>>> >
>>>> > Modified:
>>>> > lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script/import/TestImport.py
>>>> > URL:
>>>> > http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script/import/TestImport.py?rev=265461&r1=265460&r2=265461&view=diff
>>>> >
>>>> > ==============================================================================
>>>> > ---
>>>> > lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script/import/TestImport.py
>>>> > (original)
>>>> > +++
>>>> > lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script/import/TestImport.py
>>>> > Tue Apr  5 15:49:09 2016
>>>> > @@ -16,6 +16,7 @@ class ImportTestCase(TestBase):
>>>> >
>>>> >      @add_test_categories(['pyapi'])
>>>> >      @no_debug_info_test
>>>> > +    @expectedFailureAll(oslist=["windows"],
>>>> > bugnumber="llvm.org/pr27227: Python 3 import rules are different")
>>>> >      def test_import_command(self):
>>>> >          """Import some Python scripts by path and test them"""
>>>> >          self.run_test()
>>>> >
>>>> >
>>>> > _______________________________________________
>>>> > lldb-commits mailing list
>>>> > lldb-commits at lists.llvm.org
>>>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>>>> >
>>>> >
>>>> > _______________________________________________
>>>> > lldb-commits mailing list
>>>> > lldb-commits at lists.llvm.org
>>>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>>>>
>>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>


More information about the lldb-commits mailing list