" ImportError:无法导入名称_imaging"使用PyInstaller之后(Python 2)

时间:2014-07-17 07:43:05

标签: python tkinter python-imaging-library pyinstaller

我的代码是我在Python 2中编写的,从Python运行时效果很好,但在我通过PyInstaller发送脚本并运行可执行文件后,它会吐出来:

Traceback (most recent call last):
  File "<string>", line 26, in <module>
  File "/usr/local/lib/python2.7/dist-packages/PyInstaller/loader/pyi_importers.py", line 270, in load_module
    exec(bytecode, module.__dict__)
  File "/home/ben/Documents/Programming/Python/Weasyl/Test Scripts/build/test3/out00-PYZ.pyz/PIL.PngImagePlugin", line 40, in <module>
  File "/usr/local/lib/python2.7/dist-packages/PyInstaller/loader/pyi_importers.py", line 270, in load_module
    exec(bytecode, module.__dict__)
  File "/home/ben/Documents/Programming/Python/Weasyl/Test Scripts/build/test3/out00-PYZ.pyz/PIL.Image", line 53, in <module>
ImportError: cannot import name _imaging

我不完全确定导致此模块出现问题的原因,因为PyInstaller将Tkinter和PIL列为兼容。整个代码如下:

#!/usr/bin/env python

from Tkinter import *
from PIL import ImageTk, Image
import os

root = Tk()
name = Label(root, text="(username)", font="Arial 20")
name.grid(row=0, column=0)
status = Label(root, text="(login status)")
status.grid(row=1, column=0)
img = ImageTk.PhotoImage(Image.open(".avatar.png"))
panel = Label(root, image=img, relief=RAISED, height=100, width=100)
panel.grid(row=0, column=1, columnspan=2, rowspan=2)
root.mainloop()

我假设问题出在from PIL import ImageTk, Image,但是没有办法使用该模块,因为我想使用的图像是PNG格式,据我所知,Tkinter仅支持使用该模块之外的GIF格式。

编辑:如果我不能将这个模块用于PyInstaller,有没有办法让PNG图像显示在这个模块之外的Tkinter中?

1 个答案:

答案 0 :(得分:1)

我正在努力解决类似的问题。虽然PyInstaller似乎没有抱怨,但PIL模块的成像并不起作用。 但是,在我更新到Linux Mint 17之后,它才发生在我身上。之前使用Mint 15,程序编译并在那里工作正常。

我想我会尝试旧版本的PIL或其他一些加载纹理的方法......

<强>更新 好的,好消息! 好像在当前的PyInstaller开发版本中修复了这个问题。它可以在这里下载: https://github.com/pyinstaller/pyinstaller

我还尝试更改所有纹理代码以使用PyGame而不是PIL(因为我在程序中使用它),但是在使用PyInstaller 2.1制作可执行文件后运行PyGame时也遇到了麻烦。

然而,使用GitHub的当前开发版本的PyInstaller,PyGame和PIL都能正常工作!