Debugging a Recursion Error

272 views
Skip to first unread message

Chris Barker

unread,
Jan 28, 2020, 12:18:11 PM1/28/20
to pyins...@googlegroups.com
When running pyinstaller, it churns away for a long time, and results in an recursion limit exceeded error.

I even cranked up the recursion limit in the spec file (as suggested elsewhere in this list) and it took longer, but same error.

I am highly suspicious that this is an infinite recursion.

I've boiled it down to one module -- if I don't import that, it all works fine (except for not getting that critical functionality :-( ).

But I can't see anything wrong with that module -- no circular imports, for instance.

How can I debug this? I'd like to see where it's getting caught in that deep if not infinite recursion. 

Alternatively, can I tell pyinstaller to include a module but not scan it for imports?

Thanks,

-CHB


--

Christopher Barker, Ph.D.
Oceanographer

Emergency Response Division
NOAA/NOS/OR&R            (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

Chris....@noaa.gov

Chris Barker

unread,
Feb 1, 2020, 11:49:59 AM2/1/20
to pyins...@googlegroups.com
To pick up on my own note:

Turns out I had an unneeded dependency on numpy and scipy. I wanted to remove that anyway, 'cause those are huge, and when I did, this recursion issue went away.

But I do sometimes need scipy -- so it would good it could work.

I suspect that PyInstaller could be a little smarter about not getting caught in deep recursions ...

-CHB










ttepperg

unread,
Mar 22, 2021, 3:52:52 AM3/22/21
to PyInstaller
Hi Chris, all,

I have just come across the same problem, and I could work around it by increasing the the recursion limit.
However, I think this problem warrants a closer look (and certainly some thought into how to debug it) because
in my particular case, it is *really* weird. Let me explain:

Say I have a script myscript.py which I want to turn into a standalone. The latter script imports a module, yt (see yt-project.org)
as usual:

import yt.

I run PyInstaller on myscript.py and everything is fine. Now, I have another custom module, mymodule.py, which imports
yt as above. Now myscript.py *only* imports mymodule.py as usual:

import mymodule

I emphasise that the line above is the sole content of myscript.py, and the content of mymodule.py is just 'import yt'!

When I run PyInstaller on my myscript.py, I get the recursion error; more specifically [abridged]:

...
9872 INFO: Processing pre-safe import module hook six.moves from '/Users/tepper/Library/Python/3.7/lib/python/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-six.moves.py'.

=============================================================
A RecursionError (maximum recursion depth exceeded) occurred.
For working around please follow these instructions
=============================================================

How can that be??? Why importing the module yt directly works and doing it through an intermediary script fails?
It is worth stressing that so far, I have had this issue ONLY with yt, no other module, so it must be particular to the
yt library. However, I'd expect that a simple import like in the first case I described should fail as well.

Anyone has an idea why this happens and how to solve it?

Thor.

PS: My system's info:

39 INFO: PyInstaller: 4.2

39 INFO: Python: 3.7.9

45 INFO: Platform: Darwin-19.6.0-x86_64-i386-64bit

(macOS Catalina)
Reply all
Reply to author
Forward
0 new messages