2016-06-03 4 views
0

Вопрос: Как я могу получить версию ppp/pillow dpkg для работы с python3.5 и python3-tk?python3.5, tkinter и PIL - ImportError: невозможно импортировать имя '_imagingtk'

Проблема: После перезагрузки моей системы после обновления мои коды python3.5 tkinter, которые вызывают методы PIL, больше не работают. Сообщение об ошибке:

Traceback (most recent call last): 
    File "/home/user1/.local/lib/python3.5/site-packages/PIL/ImageTk.py", line 176, in paste 
    tk.call("PyImagingPhoto", self.__photo, block.id) 
_tkinter.TclError: invalid command name "PyImagingPhoto" 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "/home/user1/Code/tkTreeview_test.py", line 37, in <module> 
    app = App(root, path=path_to_my_project) 
    File "/home/user1/Code/tkTreeview_test.py", line 22, in __init__ 
    self.root_pic2 = ImageTk.PhotoImage(root_pic1)  
    File "/home/user1/.local/lib/python3.5/site-packages/PIL/ImageTk.py", line 115, in __init__ 
    self.paste(image) 
    File "/home/user1/.local/lib/python3.5/site-packages/PIL/ImageTk.py", line 180, in paste 
    from PIL import _imagingtk 
ImportError: cannot import name '_imagingtk' 

После прочтения на подобные вопросы (например 1, 2, 3) и глядя на сообщ ошибки, я думаю, что выше сообщ ошибка связана с проблемой связи между PIL.ImageTk и Tcl в папка .local/lib/python3.5/site-packages/PIL.

Я использовал диспетчер пакетов Synaptic, чтобы очистить python3-pil, python3-pil.imagetk и python3-tk и снова установить их снова. Кроме того, я попытался переустановить tk8.6 и tcl8.6. Тем не менее, те же самые сообщения об ошибках по-прежнему сохраняются каждый раз при запуске кода, открывающего изображения через модуль PIL.ImageTk.

Отдельно, я проверил, что я могу использовать tkinter.PhotoImage (file = i) из python3-tk для открытия файлов изображений. Изображение появилось без каких-либо сообщений об ошибках. Тем не менее, я использую PIL.ImageTk.PhotoImage (i), чтобы открыть тот же файл изображения i, мой код завершился с ошибкой выше.

Установленные DPKG пакеты:

ii libtcl8.6:amd64    8.6.5+dfsg-2 amd64 Tcl (the Tool Command Language) v8.6 - run-time library files 
ii tcl       8.6.0+9   amd64 Tool Command Language (default version) - shell 
ii tcl8.6      8.6.5+dfsg-2 amd64 Tcl (the Tool Command Language) v8.6 - shell 
ii libtk8.6:amd64    8.6.5-1   amd64 Tk toolkit for Tcl and X11 v8.6 - run-time files 
ii tk8.6      8.6.5-1   amd64 Tk toolkit for Tcl and X11 v8.6 - windowing shell 
ii tk8.6-blt2.5    2.5.3+dfsg-3 amd64 graphics extension library for Tcl/Tk - library 
ii python3-tk     3.5.1-1   amd64 Tkinter - Writing Tk applications with Python 3.x 
ii python3-pil:amd64   3.1.2-0ubuntu1 amd64 Python Imaging Library (Python3) 
ii python3-pil.imagetk:amd64 3.1.2-0ubuntu1 amd64 Python Imaging Library - ImageTk Module (Python3) 
ii python3-pilkit    1.1.13+dfsg-1 all  Utilities and processors built for, and on top of PIL (Python3 version) 

Установленные пип пакеты: Использование списка пип и список PIP3, я нашел pilkit (1.1.13) и подушки (3.2.0), установленный , Это означает, что у меня есть Pillow (3.2.0) через pip и python3-pil: amd64 version 3.1.2-0ubuntu1 через dpkg install в моей системе. Является ли их сосуществование причиной конфликта и, следовательно, моей проблемой?

Я пень этой проблемой и ценю советы по преодолению вышеупомянутой ошибки. Благодаря

+0

попробовать это 'Sudo APT-получить установку питона-изображения-tk' – shivsn

+0

Я использую python3.5 я должен вместо этого использовать Sudo APT-получить установку python3-изображения-ки? В моей системе python по умолчанию использует python2.7. –

+0

@shivsn Примечание, выбрав «python-pil.imagetk» вместо «python-imaging-tk» python-pil.imagetk - это уже самая новая версия (3.1.2-0ubuntu1). 0 для обновления, 0 для новой установки, 0 для удаления и 0 для обновления. Никакого улучшения моей проблемы. –

ответ

1

Ответ: ГЗС ошибка, сообщаемая выше оказывается уникальным к использованию подушки (3.2.0) (т.е. последняя версия PIL в это время) с python3.5 и tcl/tk 8.6. Это как-то не удается правильно установить tcl для метода PIL.ImageTk.PhotoImage(). См. Мою переписку с @Akash, чтобы узнать, как я это обнаружил.

Для преодоления упомянутой выше Сообщ ошибки, так что Dpkg версия PIL/Подушки (3.1.2) может работать с python3.5 и Python3-Ками снова, я сделал следующее:

  • удалившим pip установленная подушка (3.2.0) в основной системе через командная строка.

    Для Python3, команда удалить Подушка (3.2.0) является либо:

    sudo pip3 uninstall Pillow==3.2.0, как Sudo или

    pip3 uninstall Pillow==3.2.0 в качестве владельца.

    Для удаления подушки (3.2.0) в python2.7, я просто побежал те же команды но заменить PIP3 с пип.

  • Чтобы проверить, что Pillow (3.2.0) был удалён, я использовал cmd pip3 list | grep Pillow и Pillow (3.1.2). Я повторно запускаю свои коды, которые использовали метод PIL.ImageTk.PhotoImage(), и они работали.

+0

Должно было сделать это уже, но спасибо за ответ. Я искал решение более двух часов, и вы сэром спасли мой день: P – Shashank

0

Я обычно используют виртуальную среду Python, при использовании новых пакетов, установленных за пределами менеджеров пакетов (синапсов/анаконды) и т.д.

Это довольно просто, передать этот документ:
http://docs.python-guide.org/en/latest/dev/virtualenvs/

Предположим, что ваша папка проекта является MyProject

>> cd myProject 
>> virtualenv venv 
>> source venv/bin/activate 
>> pip install package_name 
+0

Вы имеете в виду, что перед отправкой моего терминала в первый раз перед установкой в ​​virtualenvs я должен установить pip3 uninstall pilkit (1.1.13) и Pillow (3.2.0)? –

+0

вам не нужно unistall. Просто прочитайте documnet один раз, вы будете понятны с концепцией виртуальной среды. –

+0

для вашего проекта создайте виртуальную среду. Установите все необходимые пакеты с помощью pip в виртуальной среде. –