nuitka 无法编译; python解释器工作正常;递归错误

问题描述

所以我有这段代码,它有一些功能。这些函数返回一个长字符串,它基本上是由连接构成的。例如:

def myFunc():

    file = ""
    file = file + "text1\n"
    file = file + "   newText\n"
    [....]
    file = file + "exit\n"

    return file

现在,如果我通过 CLI 调用它就可以了,例如 python3 myProg.py。到目前为止,一切都很好。

但是如果我尝试编译此代码,则会收到此错误

python3 -m nuitka myProg.py --nofollow-import-to=MysqLdb --nofollow-import-to=time --nofollow-import-to=os --nofollow-import-to=sys --nofollow-import-to=shutil --nofollow-import-to=zipfile --nofollow-import-to=pandas --follow-imports
Nuitka:INFO: Starting Python compilation.
Problem with statement at /home/lucas/myProg/templates/module1.py:1778:
->  out = file

Problem with statement at /home/lucas/myProg/templates/module1.py:629:
-> def myFunc():

Problem with statement at /home/lucas/myProg/templates/module1.py:629:
-> def myFunc():

Nuitka:INFO: Interrupted while working on '<Node 'COMPILED_PYTHON_MODULE' with {'code_flags': '','module_name': <ModuleName templates.module1>,'filename': '/home/lucas/myProg/templates/module1.py'}>'.
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/nuitka/MainControl.py",line 149,in createNodeTree
    Optimization.optimize(main_module.getoutputFilename())
  File "/usr/local/lib/python3.5/dist-packages/nuitka/optimizations/Optimization.py",line 625,in optimize
    makeOptimizationPass()
  File "/usr/local/lib/python3.5/dist-packages/nuitka/optimizations/Optimization.py",line 537,in makeOptimizationPass
    changed = optimizeModule(current_module)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/optimizations/Optimization.py",line 185,in optimizeModule
    changed = optimizeCompiledpythonmodule(module)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/optimizations/Optimization.py",line 106,in optimizeCompiledpythonmodule
    module.computeModule()
  File "/usr/local/lib/python3.5/dist-packages/nuitka/nodes/ModuleNodes.py",line 509,in computeModule
    trace_collection=self.trace_collection
  File "/usr/local/lib/python3.5/dist-packages/nuitka/nodes/StatementNodes.py",line 165,in computeStatementsSequence
    new_statement = statement.computeStatementsSequence(trace_collection)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/nodes/FrameNodes.py",line 182,in computeStatementsSequence
    new_statement = trace_collection.onStatement(statement=statement)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/optimizations/TraceCollections.py",line 507,in onStatement
    new_statement,change_tags,change_desc = statement.computeStatement(self)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/nodes/AssignNodes.py",line 278,in computeStatement
    source = trace_collection.onExpression(self.subnode_source)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/optimizations/TraceCollections.py",line 488,in onExpression
    r = expression.computeExpressionRaw(trace_collection=self)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/nodes/ExpressionBases.py",line 1060,in computeExpressionRaw
    expression = trace_collection.onExpression(sub_expression)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/optimizations/TraceCollections.py",in onExpression
    r = expression.computeExpressionRaw(trace_collection=self)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/nodes/FunctionNodes.py",line 953,in computeExpressionRaw
    function_body.computeFunctionRaw(trace_collection)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/nodes/FunctionNodes.py",line 433,in computeFunctionRaw
    self.computeFunction(trace_collection)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/nodes/FunctionNodes.py",line 449,in computeFunction
    trace_collection=trace_collection
  File "/usr/local/lib/python3.5/dist-packages/nuitka/nodes/StatementNodes.py",line 167,change_desc = statement.computeStatement(self)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/nodes/TryNodes.py",line 126,in computeStatement
    exception_collections = trace_collection.getExceptionRaiseCollections()
  File "/usr/lib/python3.5/contextlib.py",line 77,in __exit__
    self.gen.throw(type,value,traceback)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/optimizations/TraceCollections.py",line 219,in makeAbortStackContext
    yield
  File "/usr/local/lib/python3.5/dist-packages/nuitka/nodes/TryNodes.py",line 112,in computeStatement
    result = tried.computeStatementsSequence(trace_collection=trace_collection)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/nodes/StatementNodes.py",in onExpression
    r = expression.computeExpressionRaw(trace_collection=self)
  File "/usr/local/lib/python3.5/dist-packages/nuitka/nodes/VariableRefNodes.py",line 432,in computeExpressionRaw
    self.variable_trace.addUsage()
  File "/usr/local/lib/python3.5/dist-packages/nuitka/optimizations/ValueTraces.py",line 301,in addUsage
    self.prevIoUs.addNameUsage()
  File "/usr/local/lib/python3.5/dist-packages/nuitka/optimizations/ValueTraces.py",line 96,in addNameUsage
    self.prevIoUs.addNameUsage()
  File "/usr/local/lib/python3.5/dist-packages/nuitka/optimizations/ValueTraces.py",line 95,in addNameUsage
    if self.name_usage_count <= 2 and self.prevIoUs is not None:
RecursionError: maximum recursion depth exceeded in comparison

我所看到的是:如果我缩短串联,我可以毫无问题地编译,这意味着减少 file = file + " blabla"数量

总共,我在 myFunc() 中有 1140 个串联。

我读到使用 sys.setrecursionlimit() 可能会有所帮助。我有它在 3000;将它设置为 8000,但它也没有编译。到目前为止,唯一的解决方案是缩短串联,这是为了测试它是可以的,但不是为了我的代码的正常运行。

关于如何克服这个问题有什么想法吗?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)