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

Zachary Turner via lldb-commits lldb-commits at lists.llvm.org
Wed Apr 6 10:35:38 PDT 2016


I think we actually came up with a better idea.  the command script import
code is generating a temporary python file which actually does the import,
so we can generate the code so that it uses the imp module to do an import
by full pathname.  An example of code that already does this is in
lldb/test/use_lldb_suite.py

On Wed, Apr 6, 2016 at 8:19 AM Zachary Turner <zturner at google.com> 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
>>>>
>>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20160406/c5276a2f/attachment-0001.html>


More information about the lldb-commits mailing list