我想收拾这需要几个进口,这些matplotlib.pyplot中的应用
该kivy应用(简化,但仍然工作)是:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
import matplotlib.pyplot
Builder.load_string("""
<MyWidget>:
id: my_widget
FileChooserIconView:
id: filechooser
on_selection: my_widget.selected(filechooser.selection)
Image:
id: image
source: ""
""")
class MyWidget(BoxLayout):
def selected(self,filename):
self.ids.image.source = filename[0]
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()
这个应用程序使用Spyder的作品完美的蟒蛇。
然而,当我尝试收拾它作为一个独立的应用程序kivy它给了我最大的错误递归深度超出。
我很惊讶,我不知道是什么问题,因为:
1.有在应用程序没有递归函数。
2.Works完全在蟒蛇的Spyder在开发它,测试它,唯一的问题是包装过程中。
3.我已经尝试多种选择,包括注释掉几个部分,并且最令人惊讶的,当我注释掉进口matplotlib.pyplot应用程序包好。不过,我需要matplotlib.pyplot这个应用程序,所以取它不是一个选项。
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
#import matplotlib.pyplot
Builder.load_string("""
<MyWidget>:
id: my_widget
FileChooserIconView:
id: filechooser
on_selection: my_widget.selected(filechooser.selection)
Image:
id: image
source: ""
""")
class MyWidget(BoxLayout):
def selected(self,filename):
self.ids.image.source = filename[0]
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()
上面的代码工作和包好。
是不是有一个可以导入到kivy应用程序文件的大小限制一些?我已经尝试增加与sys.setrecursionlimit(高数)的递归限制,但它不是一个解决这个问题。我真的失去了。任何见解表示赞赏。
谢谢
编辑2019年2月4日:有人提出这个问题:pyinstaller creating EXE RuntimeError: maximum recursion depth exceeded while calling a Python object是重复的,并回答了这个问题。蟒蛇-m PyInstaller --name touchtracer例子路径\演示\ touchtracer \ main.py:虽然这是明确一个相关的问题是有益的,在创建kivy包的第一阶段发生我的错误
当我们进入一个递归,存在栈溢出和CPython的引擎盖没有承担起自己优化尾递归下工作的风险,因此,如果你去太深,你会走向一个堆栈溢出接近。一般来说不同的CPython / Python的口味有不同的递归许可证的深度,你在本地运行有更自由的深度限制(通常是因为假设开发商有足够好的电脑,这可能发生)的Python版本。但是,当你使用工具打包应用程序,它们通常覆盖sys.setrecursionlimit更为保守的价值,因为他们试图确保你不会造成系统的堆栈溢出用较低的硬件。
可悲的是,没有银弹对于这个问题,你可以尝试寻找到特定经理和改变限制(不推荐),或者你可以尝试你的递归块转换成迭代块。
谢谢你这么多大家谁试图帮助。我找到了答案,我希望它可以帮助谁试图创建一个kivy包中的其他人,还有一个问题导入Python模块(一个或多个)。
一旦你有你main.py
脚本准备包:
1.启动与说明
https://kivy.org/doc/stable/guide/packaging-windows.html
做的第一步:
python -m PyInstaller --name touchtracer examples-path\demo\touchtracer\main.py
这会给你maximum recursion depth exceeded
或任何错误的错误这个原本提供给您。别担心。这个步骤的目的是创建一个初始spec
文件。
2.打开spec
文件,并添加所有的kivy
指令给你的临时演员
https://kivy.org/doc/stable/guide/packaging-windows.html
那是:
from kivy.deps import sdl2, glew
Tree('examples-path\\demo\\touchtracer\\'),
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
3.In除此之外,在添加的规范文件中的以下的开头:
import sys
sys.setrecursionlimit(5000) # (or some big number)
4.Also中,您可能需要隐藏的进口增加任何进口。
hiddenimports=[] # change to (example importing pandas and matplotlib) hiddenimports=['pandas', 'matplotlib']
5.Just跟随在最后一步
https://kivy.org/doc/stable/guide/packaging-windows.html
那是:
python -m PyInstaller touchtracer.spec
并得到您的应用程序内置