Не удается получить lexers.PythonLexer() из приложения Kivy, созданного с помощью PyInstaller

У меня есть приложение Python, которое работает очень хорошо, внутри которого я делаю что-то вроде:

from pygments import lexers

затем...

testing = lexers.PythonLexer()

Просто запуск скрипта работает отлично, и я получаю новый экземпляр PythonLexer. Однако... когда я создаю папку сборки для приложения с помощью PyInstaller, а затем запускаю ее, эта строка завершается ошибкой:

Файл "blah\myfile", строка 31, в __init__ AttributeError: у объекта 'module' нет атрибута 'PythonLexer'

Есть идеи? Я думаю, это потому, что pygments каким-то образом создает свои объекты во время выполнения из некоторых файлов, которые отсутствуют в моей папке сборки PyInstaller, но я не совсем понимаю, как это сделать.

Приложение использует Kivy, но на самом деле я не думаю, что это связано с этой проблемой.

3 ответа

Решение

Проблема в том, что пакет pygments.lexers не содержит файл с именем PythonLexer.py, Чтобы решить проблему, вы можете сделать это:

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

Вы можете исправить это, воспользовавшись одним из предложений PyInstaller по включению модулей, которые не были найдены автоматически. http://pythonhosted.org/PyInstaller/

Я столкнулся с подобной проблемой при использовании pyinstaller упаковать демонстрационное приложение Kivy'витрина'.

Кажется, это ошибка 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
Другие вопросы по тегам