2016-05-01 3 views
1

Я пытаюсь использовать PyInstaller для компиляции одного из демо-скриптов для Asciimatics, в надежде, что в конечном итоге сможет создать простой графический интерфейс для текстовой игры. м развивается, и она возвращает следующее сообщение об ошибке:PyInstaller ImportError: Нет модуля с именем 'pyfiglet.fonts'

C:\Users\X\Documents\Python Scripts\asciimatics samples\dist\test>test.exe 

Traceback (most recent call last): 
    File "site-packages\setuptools-19.2-py3.4.egg\pkg_resources\__init__.py", line 443, in get_provider 
KeyError: 'pyfiglet.fonts' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "<string>", line 22, in <module> 
    File "site-packages\asciimatics\screen.py", line 859, in wrapper 
    File "<string>", line 12, in demo 
    File "site-packages\asciimatics\renderers.py", line 276, in __init__ 
    File "site-packages\pyfiglet\__init__.py", line 710, in __init__ 
    File "site-packages\pyfiglet\__init__.py", line 717, in setFont 
    File "site-packages\pyfiglet\__init__.py", line 90, in __init__ 
    File "site-packages\pyfiglet\__init__.py", line 100, in preloadFont 
    File "site-packages\setuptools-19.2-py3.4.egg\pkg_resources\__init__.py", line 1160, in resource_exists 
    File "site-packages\setuptools-19.2-py3.4.egg\pkg_resources\__init__.py", line 445, in get_provider 
ImportError: No module named 'pyfiglet.fonts' 
test returned -1 

погуглить эта ошибка возвращается this thread, но мне кажется, что ошибка вызвана неисправностью в самой SublimeFiglet, и был зафиксирован два года назад.

Я использую Python 3.4 для Windows 10. Мне пришлось переопределить setuptools до 19.2 (я полагаю, это версия, к которой я должен был перейти), потому что я получал сообщение об ошибке, когда упаковывался пакет при попытке запустить скомпилированный файл .exe.

Я импортировал как шесть (из-за его скрытого импорта), так и модули pyfiglet в test.py, в дополнение к другим импортерам, необходимым для запуска скрипта. Импорт пифиглетов и любые варианты, о которых я могу думать, ничего не меняет. Я могу изменить файл спецификации, чтобы добавить скрытый импорт на шесть, хотя я не вижу, как это изменит что-либо.

Вот файл спецификации Pyinstaller использует:

block_cipher = None 


a = Analysis(['test.py'], 
      pathex=['C:\\Users\\Sirindil\\Documents\\Python Scripts\\asciimatics samples'], 
      binaries=None, 
      datas=None, 
      hiddenimports=[], 
      hookspath=[], 
      runtime_hooks=[], 
      excludes=[], 
      win_no_prefer_redirects=False, 
      win_private_assemblies=False, 
      cipher=block_cipher) 
pyz = PYZ(a.pure, a.zipped_data, 
      cipher=block_cipher) 
exe = EXE(pyz, 
      a.scripts, 
      exclude_binaries=True, 
      name='test', 
      debug=False, 
      strip=False, 
      upx=True, 
      console=True) 
coll = COLLECT(exe, 
       a.binaries, 
       a.zipfiles, 
       a.datas, 
       strip=False, 
       upx=True, 
       name='test') 

Каждый образец включен сценарий Asciimatics возвращает эту же ошибку для меня. Я попытался использовать различные параметры при запуске pyinstaller в скрипте, без успеха. Я что-то упускаю? Я не знаю, как это исправить.

+0

Как вы строите свой exe с помощью PyInstaller? Можете ли вы предоставить файл спецификации? –

+0

Отредактировано, чтобы предоставить файл спецификации. –

ответ

0

Похоже, вы строите свой EXE, не включая файлы шрифтов от pyfiglet. Это связано с тем, что PyInstaller не может интерпретировать вызов pkg_resources изнутри pyfiglet при создании набора файлов для упаковки.

Я не использовал его сам, но похоже, что вы можете добавить файлы шрифтов в свой пакет на updating your spec file, чтобы включить в него все отсутствующие файлы. Тем не менее, вы должны обратить внимание на FAQ, в котором говорится, что существует только ограниченная поддержка pkg_resources (и, возможно, вы просто не можете упаковать pyfiglet).

0

Вопрос довольно старый, но у меня была такая же проблема и решить ее просто копировать/вставить pyfiglet папку PYTHONPATH \ Lib \ сайт-пакетов в pyinstaller DIST папки.

0

Обеспечить путь папку Pyfiglet на систему в PyInstaller опции команды, которые будут копировать файлы в генерируемый дист.

Например:.

pyinstaller --add-data "C:/Program Files/Python35/Lib/site-packages/pyfiglet";./pyfiglet MyApp.py

Или для одного EXE-файла:

pyinstaller --onefile --add-data "C:/Program Files/Python35/Lib/site-packages/pyfiglet";./pyfiglet MyApp.py

Если предположить, что ваше имя App является "MyApp.py", ваша система Windows, и Lib Pyfiglet установлен на следующий путь: C:/Program Files/Python35/Lib/site-packages/pyfiglet

В противном случае измените правильные значения.

Смежные вопросы