无法从使用PyInstaller构建的Kivy app获取lexers.PythonLexer()

时间:2014-05-22 22:21:03

标签: python kivy pyinstaller pygments

我有一个非常好用的Python应用程序,其中我做了类似的事情:

from pygments import lexers

...然后

testing = lexers.PythonLexer()

运行脚本效果很好,我得到了一个PythonLexer的新实例。但是......当我使用PyInstaller为应用程序创建构建文件夹然后运行它时,该行失败:

  

文件" blah \ myfile",第31行,在__init__   AttributeError:'模块' object没有属性' PythonLexer'

有什么想法吗?我认为这是因为pygments以某种方式在运行时从我的PyInstaller构建文件夹中缺少的某些文件构建其对象,但我不太清楚如何。

该应用正在使用Kivy,但实际上我并不认为这个问题太多了。

3 个答案:

答案 0 :(得分:2)

问题是包pygments.lexers不包含名为PythonLexer.py的文件。要解决问题,您可以这样做:

from pygments.lexers.agile import PythonLexer
testing = PythonLexer()

答案 1 :(得分:1)

您可以使用PyInstaller的一个建议来修复它,以包含自动找不到的模块。 http://pythonhosted.org/PyInstaller/#helping-pyinstaller-find-modules

答案 2 :(得分:0)

使用pyinstaller打包Kivy的“showcase”演示应用时遇到了类似的问题。

这似乎是一个Pygments错误。

修补\pygments\lexers\__init__.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