Can';t从使用PyInstaller构建的Kivy应用程序中获取lexers.PythonLexer()
我有一个Python应用程序,它运行得非常好,在它里面我做了如下操作:Can';t从使用PyInstaller构建的Kivy应用程序中获取lexers.PythonLexer(),python,kivy,pyinstaller,pygments,Python,Kivy,Pyinstaller,Pygments,我有一个Python应用程序,它运行得非常好,在它里面我做了如下操作: from pygments import lexers 然后 testing = lexers.PythonLexer() 只要运行脚本就可以了,我得到了一个PythonLexer的新实例。然而。。。当我使用PyInstaller创建应用程序的构建文件夹并运行它时,该行失败: 文件“blah\myfile”,第31行,在 AttributeError:“module”对象没有属性“PythonLexer” 有什么想法吗?
from pygments import lexers
然后
testing = lexers.PythonLexer()
只要运行脚本就可以了,我得到了一个PythonLexer的新实例。然而。。。当我使用PyInstaller创建应用程序的构建文件夹并运行它时,该行失败:
文件“blah\myfile”,第31行,在
AttributeError:“module”对象没有属性“PythonLexer”
有什么想法吗?我认为这是因为pygments在运行时以某种方式从我的PyInstaller build文件夹中丢失的一些文件中构建了它的对象,但我不太清楚如何构建
应用程序正在使用Kivy,但我实际上认为这与此问题没有太大关系。问题在于包
pygments.lexers
中没有名为PythonLexer.py
的文件。要解决问题,可以执行以下操作:
from pygments.lexers.agile import PythonLexer
testing = PythonLexer()
您可以使用PyInstaller的建议之一来修复它,其中包括无法自动找到的模块 我在使用
pyinstaller
打包Kivy的“showcase”演示应用程序时遇到了类似的问题
这似乎是Pygments的错误
在我修补了\pygments\lexers\\uuuuu init\uuuuuu.py
之后,错误消失了:
--- __init__old.py
+++ __init__.py
@@ -15,6 +15,7 @@
import fnmatch
from os.path import basename
+from pygments.lexers.agile import PythonLexer
from pygments.lexers._mapping import LEXERS
from pygments.modeline import get_filetype_from_buffer
这确实解决了这个问题。但是,我需要使用PyInstaller设置来修复这个问题,而不是编辑我的文件(这个文件实际上不是我的,它在Kivy内部)。我希望hook-pygments.lexers.py文件会涵盖这一点,但是默认的hook文件已经包含了hiddenimports=['agile','dotnet'],所以我不明白为什么它不进行导入。只是想补充一下,我也遇到了这个问题,无法解决这个问题。最终我去掉了使用rstwidget和codeinput的*.kv,并修改了
main.py
以不显示源代码。。。。再一次告诉我,回到自己的评论(你知道为什么Kivy应用程序找不到PythonLexer吗?我已经安装了这些:“sudo pip install pyglet docutils”