ronaldoussoren / py2app

py2app is a Python setuptools command which will allow you to make standalone Mac OS X application bundles and plugins from Python scripts.
Other
340 stars 36 forks source link

py2app RecursionError: maximum recursion depth exceeded when using python setup.py py2app #498

Open XavierPixel opened 1 year ago

XavierPixel commented 1 year ago

I also meet similar issue like “ RecursionError: maximum recursion depth exceeded #316 ” creating build/bdist.macosx-11.0-arm64/python3.10-standalone/app/lib-dynload creating build/bdist.macosx-11.0-arm64/python3.10-standalone/app/Frameworks RecursionError while compiling code, skip scanning bytecode Skip compiling '/Users/xmfan/anaconda3/lib/python3.10/site-packages/sympy/polys/polyquinticconst.py' due to recursion error Traceback (most recent call last): ... self.visit(item) File "/Users/xmfan/anaconda3/lib/python3.10/ast.py", line 412, in visit return visitor(node) File "/Users/xmfan/anaconda3/lib/python3.10/ast.py", line 416, in generic_visit for field, value in iter_fields(node): RecursionError: maximum recursion depth exceeded

Seems sympy has deep recursive,

and i try python setup.py py2app -A, it works well, when i use python setup.py py2app error happens. Any suggestions ? @ronaldoussoren

my packagelist Package Version

alabaster 0.7.12 altgraph 0.17.3 anaconda-client 1.11.2 anaconda-navigator 2.4.0 anaconda-project 0.11.1 anyio 3.5.0 appdirs 1.4.4 applaunchservices 0.3.0 appnope 0.1.2 appscript 1.1.2 argon2-cffi 21.3.0 argon2-cffi-bindings 21.2.0 arrow 1.2.3 astroid 2.14.2 astropy 5.1 asttokens 2.0.5 atomicwrites 1.4.0 attrs 22.1.0 Automat 20.2.0 autopep8 1.6.0 Babel 2.11.0 backcall 0.2.0 backports.functools-lru-cache 1.6.4 backports.tempfile 1.0 backports.weakref 1.0.post1 bcrypt 3.2.0 beautifulsoup4 4.11.1 binaryornot 0.4.4 black 22.6.0 bleach 4.1.0 bokeh 2.4.3 boltons 23.0.0 Bottleneck 1.3.5 brotlipy 0.7.0 certifi 2023.5.7 cffi 1.15.1 chardet 4.0.0 charset-normalizer 2.0.4 click 8.0.4 cloudpickle 2.0.0 clyent 1.2.2 colorama 0.4.6 colorcet 3.0.1 colour 0.1.5 colour-science 0.4.2 comm 0.1.2 conda 23.3.1 conda-build 3.24.0 conda-content-trust 0.1.3 conda-pack 0.6.0 conda-package-handling 2.0.2 conda_package_streaming 0.7.0 conda-repo-cli 1.0.41 conda-token 0.4.0 conda-verify 3.4.2 constantly 15.1.0 contourpy 1.0.5 cookiecutter 1.7.3 cryptography 39.0.1 cssselect 1.1.0 cycler 0.11.0 cytoolz 0.12.0 dask 2022.7.0 datashader 0.14.4 datashape 0.5.4 debugpy 1.5.1 decorator 4.4.2 defusedxml 0.7.1 diff-match-patch 20200713 dill 0.3.6 distributed 2022.7.0 docstring-to-markdown 0.11 docutils 0.18.1 entrypoints 0.4 et-xmlfile 1.1.0 executing 0.8.3 fastjsonschema 2.16.2 filelock 3.9.0 flake8 6.0.0 Flask 2.2.2 flit_core 3.6.0 fonttools 4.25.0 fsspec 2022.11.0 future 0.18.3 gensim 4.3.0 glob2 0.7 gmpy2 2.1.2 greenlet 2.0.1 h5py 3.7.0 HeapDict 1.0.1 holoviews 1.15.4 huggingface-hub 0.10.1 hvplot 0.8.2 hyperlink 21.0.0 idna 3.4 imagecodecs 2021.8.26 imageio 2.26.0 imageio-ffmpeg 0.4.8 imagesize 1.4.1 imbalanced-learn 0.10.1 importlib-metadata 4.11.3 incremental 21.3.0 inflection 0.5.1 iniconfig 1.1.1 intake 0.6.7 intervaltree 3.1.0 ipykernel 6.19.2 ipython 8.10.0 ipython-genutils 0.2.0 isort 5.9.3 itemadapter 0.3.0 itemloaders 1.0.4 itsdangerous 2.0.1 jedi 0.18.1 jellyfish 0.9.0 Jinja2 3.1.2 jinja2-time 0.2.0 jmespath 0.10.0 joblib 1.1.1 json5 0.9.6 jsonpatch 1.32 jsonpointer 2.1 jsonschema 4.17.3 jupyter_client 7.3.4 jupyter_core 5.2.0 jupyter-server 1.23.4 jupyterlab 3.5.3 jupyterlab-pygments 0.1.2 jupyterlab_server 2.19.0 keyring 23.4.0 kiwisolver 1.4.4 lazy-object-proxy 1.6.0 libarchive-c 2.9 llvmlite 0.39.1 locket 1.0.0 lxml 4.9.1 lz4 3.1.3 macholib 1.16.2 Markdown 3.4.1 MarkupSafe 2.1.1 matplotlib 3.7.0 matplotlib-inline 0.1.6 mccabe 0.7.0 mistune 0.8.4 mock 4.0.3 modulegraph 0.19.3 moviepy 1.0.3 mpmath 1.2.1 msgpack 1.0.3 multipledispatch 0.6.0 munkres 1.1.4 mypy-extensions 0.4.3 navigator-updater 0.3.0 nbclassic 0.5.2 nbclient 0.5.13 nbconvert 6.5.4 nbformat 5.7.0 nest-asyncio 1.5.6 networkx 2.8.4 nltk 3.7 notebook 6.5.2 notebook_shim 0.2.2 numba 0.56.4 numexpr 2.8.4 numpy 1.23.5 numpydoc 1.5.0 opencv-python 4.7.0.72 openpyxl 3.0.10 packaging 22.0 pandas 1.5.3 pandocfilters 1.5.0 panel 0.14.3 param 1.12.3 parsel 1.6.0 parso 0.8.3 partd 1.2.0 pathlib 1.0.1 pathspec 0.10.3 patsy 0.5.3 pep8 1.7.1 pexpect 4.8.0 pickleshare 0.7.5 Pillow 9.4.0 pip 22.3.1 pkginfo 1.9.6 platformdirs 2.5.2 plotly 5.9.0 pluggy 1.0.0 ply 3.11 pooch 1.4.0 poyo 0.5.0 proglog 0.1.10 prometheus-client 0.14.1 prompt-toolkit 3.0.36 Protego 0.1.16 psutil 5.9.0 ptyprocess 0.7.0 pure-eval 0.2.2 py 1.11.0 py2app 0.28.5 pyasn1 0.4.8 pyasn1-modules 0.2.8 pycodestyle 2.10.0 pycosat 0.6.4 pycparser 2.21 pyct 0.5.0 pycurl 7.45.1 PyDispatcher 2.0.5 pydocstyle 6.3.0 pyerfa 2.0.0 pyflakes 3.0.1 Pygments 2.11.2 PyHamcrest 2.0.2 PyJWT 2.4.0 pylint 2.16.2 pylint-venv 2.3.0 pyls-spyder 0.4.0 pyobjc-core 9.0 pyobjc-framework-Cocoa 9.0 pyobjc-framework-CoreServices 9.0 pyobjc-framework-FSEvents 9.0 pyodbc 4.0.34 pyOpenSSL 23.0.0 pyparsing 3.0.9 PyQt5-sip 12.11.0 pyrsistent 0.18.0 PySocks 1.7.1 pytest 7.1.2 python-dateutil 2.8.2 python-lsp-black 1.2.1 python-lsp-jsonrpc 1.0.0 python-lsp-server 1.7.1 python-slugify 5.0.2 python-snappy 0.6.1 pytoolconfig 1.2.5 pytz 2022.7 pyviz-comms 2.0.2 PyWavelets 1.4.1 PyYAML 6.0 pyzmq 23.2.0 QDarkStyle 3.0.2 qstylizer 0.2.2 qt-material 2.14 QtAwesome 1.2.2 qtconsole 5.4.0 QtPy 2.2.0 queuelib 1.5.0 regex 2022.7.9 requests 2.28.1 requests-file 1.5.1 requests-toolbelt 0.9.1 rope 1.7.0 Rtree 1.0.1 ruamel.yaml 0.17.21 ruamel.yaml.clib 0.2.6 ruamel-yaml-conda 0.17.21 scikit-image 0.19.3 scikit-learn 1.2.1 scipy 1.10.0 Scrapy 2.8.0 seaborn 0.12.2 Send2Trash 1.8.0 service-identity 18.1.0 setuptools 65.6.3 sip 6.6.2 six 1.16.0 smart-open 5.2.1 sniffio 1.2.0 snowballstemmer 2.2.0 sortedcontainers 2.4.0 soupsieve 2.3.2.post1 Sphinx 5.0.2 sphinxcontrib-applehelp 1.0.2 sphinxcontrib-devhelp 1.0.2 sphinxcontrib-htmlhelp 2.0.0 sphinxcontrib-jsmath 1.0.1 sphinxcontrib-qthelp 1.0.3 sphinxcontrib-serializinghtml 1.1.5 spyder 5.4.1 spyder-kernels 2.4.1 SQLAlchemy 1.4.39 stack-data 0.2.0 statsmodels 0.13.5 sympy 1.11.1 tables 3.7.0 tabulate 0.8.10 TBB 0.2 tblib 1.7.0 tenacity 8.0.1 terminado 0.17.1 text-unidecode 1.3 textdistance 4.2.1 threadpoolctl 2.2.0 three-merge 0.1.1 tifffile 2021.7.2 tinycss2 1.2.1 tldextract 3.2.0 tokenizers 0.11.4 toml 0.10.2 tomli 2.0.1 tomlkit 0.11.1 toolz 0.12.0 torch 1.12.1 tornado 6.1 tqdm 4.64.1 traitlets 5.7.1 transformers 4.24.0 Twisted 22.2.0 typing_extensions 4.4.0 ujson 5.4.0 Unidecode 1.2.0 urllib3 1.26.14 w3lib 1.21.0 watchdog 2.1.6 wcwidth 0.2.5 webencodings 0.5.1 websocket-client 0.58.0 Werkzeug 2.2.2 whatthepatch 1.0.2 wheel 0.38.4 wrapt 1.14.1 wurlitzer 3.0.2 xarray 2022.11.0 xlwings 0.29.1 yapf 0.31.0 zict 2.1.0 zipp 3.11.0 zope.interface 5.4.0 zstandard 0.19.0

peircej commented 1 year ago

I get the same. In my case I could workaround by setting sympy in the excludes and it seems not to be a problem - I guess some package that I use declares this dependency but isn't strictly needed - but would be nice to get it fixed

ronaldoussoren commented 1 year ago

Having a script that reproduces the problem would help.

I get the following messages from a script that imports sympy.polys.polyquinticconst, but the builds succeeds as expected (that is no traceback and an app bundle that can import the module).

RecursionError while compiling code, skip scanning bytecode 
Skip compiling '/Users/ronald/Projects/py2app/workenv10/lib/python3.10/site-packages/sympy/polys/polyquinticconst.py' due to recursion error 
RecursionError while compiling code, skip scanning bytecode 
Skip compiling '/Users/ronald/Projects/py2app/workenv10/lib/python3.10/site-packages/sympy/polys/numberfields/resolvent_lookup.py' due to recursion error 
--- Skipping recipe PIL ---

These warnings are harmless, they change the way py2app scans these modules for dependencies and that disables some of the intelligence for handling missing modules. Neither module has dependencies outside of sympy itself, so that's not relevant for building apps using this package.

phixofor commented 5 months ago

Here's an old hack from cx_freeze that works for me.

Add this to your setup.py:

import sys
sys.setrecursionlimit(5000)
DoubleStarK commented 3 months ago

sys.setrecursionlimit(5000)

I thought it was infinite loop but this really help.....