问题:如何让dpkg PIL / Pillow版本与python3.5和python3-tk一起使用?
问题:更新后重新启动系统后,调用PIL方法的python3.5 tkinter代码不再有效。错误消息是:
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之间的通信问题有关和我的.local / lib / python3.5 / site-packages / PIL文件夹中的Tcl。
我使用Synaptic Package Manager清除python3-pil,python3-pil.imagetk和python3-tk并重新安装它们。另外,我试图重新安装tk8.6和tcl8.6。但是,每次运行代码通过PIL.ImageTk模块打开图像时,相同的错误消息仍然存在。
另外,我已经检查过我可以使用python3-tk中的tkinter.PhotoImage(file = i)来打开图像文件。图像显示没有任何错误消息。但是,我使用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)
安装的pip包:使用 pip list 和 pip3 list ,我找到了pilkit(1.1.13)和Pillow(3.2.0)安装。这意味着我有Pipow(3.2.0)通过pip和python3-pil:amd64版本3.1.2-0ubuntu1通过dpkg安装在我的系统中。他们的共存是否导致了冲突,从而引发了我的问题?
我是这个问题的残余,并赞赏克服上述错误消息的建议。感谢
答案 0 :(得分:1)
答案:发现上面报告的错误消息是使用Pillow(3.2.0)(即此时最新版本的PIL)与python3.5和tcl / tk 8.6的唯一。它以某种方式无法与TIL正确地通信PIL.ImageTk.PhotoImage()方法。看看我与@Akash的通信,看看我是如何发现这一点的。
为了克服上面提到的错误消息,以便dpkg PIL / Pillow版本(3.1.2)可以再次使用python3.5和python3-tk,我做了以下内容:
在主系统中卸载 pip 已安装的Pillow(3.2.0) 命令行。
对于python3,卸载Pillow(3.2.0)的命令是:
sudo pip3 uninstall Pillow==3.2.0
为sudo,或
pip3 uninstall Pillow==3.2.0
作为所有者。
要在python2.7中卸载Pillow(3.2.0),我只需运行相同的命令 但用 pip 替换 pip3 。
要检查Pillow(3.2.0)是否已卸载,我使用了cmd pip3 list | grep
Pillow
并出现了Pillow (3.1.2)
。我重新运行使用PIL.ImageTk.PhotoImage()方法的代码并且它们有效。
答案 1 :(得分:0)
我通常使用python虚拟环境,当使用在包管理器(synaptic / anaconda)之外安装的新包时。
这很简单,请参阅此文档:
http://docs.python-guide.org/en/latest/dev/virtualenvs/
假设您的项目文件夹是myProject
>> cd myProject
>> virtualenv venv
>> source venv/bin/activate
>> pip install package_name