У меня есть своеобразная проблема на пересечении формата изображения EMF, библиотек изображений python PIL (а также Pillow) и программы Pyinstaller для упаковки Python в исполняемый файл Windows.
У меня есть скрипт, который использует PIL/Pillow для преобразования файла EMF в JPEG. Это работает правильно, когда я запускаю скрипт python в python. Однако, когда я упаковываю его в EXE с помощью Pyinstaller.exe -F, он не работает.
С версией Pillow я получаю простую ошибку, говорящую
«Не удается преобразовать image1.emf».
С версией PIL я получаю более длинное сообщение, в котором говорится:
Трассировка (последний последний вызов): Файл "", строка 38, в файле "", строка 27, в файле convertImageFile "C:\Embibe\Git\content-ingestion\src\build\convertImage\out00-PYZ.pyz\ PIL .Image", строка 2126, в открытом IOError: не удается идентифицировать файл изображения "image1.emf"
Кто-нибудь еще сталкивался с этим и нашел рабочее решение?
Далее следуют кровавые подробности, если они вам нужны... :-)
ОС: Windows 7 64-битная (но все ПО 32-битное)
Программное обеспечение:: Python: 2.7.5, Pyinstaller: 2.1, PIL: встроенный в Python, Pillow: 2.4.0
Скрипт Python convImg.py:
from __future__ import print_function
import os, sys
from PIL import Image
for infile in sys.argv[1:]:
f, e = os.path.splitext(infile)
outfile = f + ".jpg"
if infile != outfile:
try:
Image.open(infile).convert('RGB').save(outfile)
except IOError:
print("cannot convert", infile)
запустить как: convImg.py image1.emf
работает правильно и генерирует image1.jpg.
При упаковке в exe с использованием \python27\scripts\pyinstaller.exe -F convImg.py
и запуске как convImg.exe image1
выдает ошибки, перечисленные выше для версий Pillow и PIL.
Я нашел связанный пост здесь, проблемы Pyinstaller с Pillow, но решение для него, а именно использование py2app вместо pyinstaller для меня не вариант, так как это для MacOS, а мне нужна Windows. Я рассматривал возможность использования аналогичных альтернатив для Windows, py2exe и cx_freeze, но они не создают один автономный исполняемый файл, как это делает pyinstaller.
Спасибо, Амит