无法从使用PyInstaller构建的Kivy应用中获取lexers.PythonLexer()
我有一个Python应用程序,运行得非常顺利。在里面,我做了一些事情,比如:
from pygments import lexers
然后...
testing = lexers.PythonLexer()
直接运行这个脚本效果很好,我得到了一个新的PythonLexer实例。但是...当我用PyInstaller为这个应用程序创建一个构建文件夹并运行它时,那行代码就出错了:
文件 "blah\myfile",第31行,在 __init__ AttributeError: 'module' 对象没有属性 'PythonLexer'
有什么想法吗?我觉得这可能是因为pygments在运行时从一些在我的PyInstaller构建文件夹中缺失的文件中构建它的对象,但我不太明白具体是怎么回事。
这个应用程序使用了Kivy,但我其实觉得这和这个问题关系不大。
3 个回答
0
我在用 pyinstaller
打包 Kivy 的“展示”演示应用时,遇到了类似的问题。
这似乎是 Pygments 的一个 bug。
在我修复了 \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
1
你可以试试用PyInstaller提供的一些方法来解决这个问题,这些方法可以帮助你把那些没有被自动找到的模块包含进来。具体的建议可以在这个链接里找到:http://pythonhosted.org/PyInstaller/#helping-pyinstaller-find-modules
2
问题是,包 pygments.lexers
里没有一个叫 PythonLexer.py
的文件。要解决这个问题,你可以这样做:
from pygments.lexers.agile import PythonLexer
testing = PythonLexer()