2014-05-22 66 views
4

建我有一個Python應用程序,它非常漂亮的作品,這裏面我做這樣的事情Kivy應用得到lexers.PythonLexer():不能從PyInstaller

from pygments import lexers 

然後...

testing = lexers.PythonLexer() 

只要運行該腳本工作得很好,我會得到一個PythonLexer的新實例。但是...當我做一個build文件夾使用PyInstaller的應用程序,然後運行它,該行失敗:

File "blah\myfile", line 31, in __init__ AttributeError: 'module' object has no attribute 'PythonLexer'

任何想法?我認爲這是因爲pygments在運行時從PyInstaller構建文件夾中缺少的一些文件構建它的對象,但我不太明白。

該應用正在使用Kivy,但我其實並不認爲這個問題太多。

回答

2

問題是包pygments.lexers沒有包含名爲PythonLexer.py的文件。要解決問題,你可以這樣做:

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

這確實解決問題。但是,我需要使用PyInstaller安裝程序修復此問題,而不是通過編輯我的文件(該文件實際上不是我的,它位於Kivy內部)。我期望這將被hook-pygments.lexers.py文件覆蓋,但默認的鉤子文件已經包含hiddenimports = ['agile','dotnet'],所以我不明白爲什麼它不會導入。 –

+0

只是想補充一點,我也遇到過這個問題,無法解決這個問題。最後,我擺脫了使用rstwidget和codeinput的* .kv,並修改'main.py'不顯示源代碼。 – swdev

+0

...在這裏我再次回到自己的評論.... :(任何想法爲什麼一個Kivy應用程序找不到PythonLexer?我已經安裝了這些:「sudo pip install pyglet docutils」 – swdev

0

當使用pyinstaller來打包Kivy的'showcase'演示程序時,我遇到了類似的問題。

它似乎是一個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