Создание программы на Python 3 для пользователей Windows, не можете использовать PIL? - PullRequest
2 голосов
/ 24 января 2012

Я написал довольно простую программу с графическим интерфейсом для автоматизации нескольких процессов для пользователей Windows в Python (так как это единственный язык программирования, с которым я немного знаком, он будет работать в Windows). В идеале я бы не хотел, чтобы пользователь запускал программу установки на своем компьютере, поскольку я планирую запускать автономную программу на USB-накопителе.

Это зависит от os, shutil, string, sys, tkinter, webbrowser, PIL, ftplib и glob.

Кажется, что все зависимости были импортированы, когда я запустил cx_freeze, кроме PIL. Я никогда раньше не использовал cx_freeze, так что я могу сделать что-то не так, но это не так. Запуск программы из незамерзающего скрипта .py работает просто отлично.

Вот сообщение об ошибке, которое я получаю при попытке использовать команду PIL:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python32\lib\tkinter\__init__.py", line 1399, in __call__
    return self.func(*args)
  File "E:\AlbumUploader.py", line 143, in OnButton2Click
    img.thumbnail(size, Image.ANTIALIAS)
  File "C:\Python32\lib\site-packages\PIL\Image.py", line 1573, in thumbnail
    self.load()
  File "C:\Python32\lib\site-packages\PIL\ImageFile.py", line 168, in load
    self.load_prepare()
  File "C:\Python32\lib\site-packages\PIL\ImageFile.py", line 234, in load_prepare
    self.im = Image.core.new(self.mode, self.size)
  File "C:\Python32\lib\site-packages\PIL\Image.py", line 39, in __getattr__
    raise ImportError("The _imaging C module is not installed")
ImportError: The _imaging C module is not installed

Спасибо за любую помощь, которую вы можете предоставить. Я вижу, что он все еще ссылается на C: \ Python32, что может быть частью проблемы, потому что это не должно быть (если я не ошибаюсь).

Обновление:

Я посмотрел FAQ по PIL, и похоже, что суть этого ответа в том, что мне нужно убедиться, что мой список sys.path правильный. Я в основном собрал все файлы Python для Windows и включил его в USB-накопитель, который я пытаюсь использовать, чтобы вместить все, и установил свой путь так:

program_dir = os.path.split(sys.argv[0])[0]
sys.path = [program_dir]
sys.path.append(program_dir + os.sep + 'Lib')
sys.path.append(program_dir + os.sep + 'Lib' + os.sep + 'site-packages')
sys.path.append(program_dir + os.sep + 'Lib' + os.sep + 'site-packages' + os.sep + 'PIL')
sys.path.append(program_dir + os.sep + 'DLLs')

Все пути кажутся правильными, но по какой-то причине я все еще получаю ту же ошибку. Когда я запускаю файл .py, все работает на 100%, но, похоже, это как-то ломается. Другие модули работают нормально, например, shutil, os и sys.

Ответы [ 2 ]

4 голосов
/ 24 января 2012

Я думаю, что ваша основная проблема может заключаться в том, что Python Imaging Library (PIL) еще не поддерживает Python 3.x.

Если вы посмотрите страницу загрузки PIL , вы увидите, что есть загрузки для Windows для Python 2.4, 2.5, 2.6 и 2.7, но для Python 3.x ничего нет.

На этот вопрос есть ответ, в котором указаны неофициальные порты PIL для Python 3.x, которые стоит попробовать.

Если это сработает, вы можете взглянуть на Первый вопрос в PIL FAQ , посвященный ошибке «Модуль _imaging C не установлен», и перечисляет различные действия, которые можно предпринять для выявления проблемы.

0 голосов
/ 24 января 2012

В прошлом я обнаружил, что cx_Freeze испытывает проблемы с вытягиванием правильных DLL-файлов под Windows.

Я использовал Process Explorer , чтобы отследить, какие DLL-файлы искали, но не нашли, а затем добавили их в проект вручную, и это заставило его работать.Как и в случае с любым файлом, я полагаю, что то же самое можно сделать и в вашем случае.

Это было для моего использования с PySFML, поэтому ваш пробег может отличаться.

...