我有一个Python程序有问题(蟒蛇2.7.3,X11的Tkinter,py2app 0.6.4,MacOS X的10.7.4),我试图出口到py2app。该问题只发生在程序的独立py2app-ified应用程序版本中。当我运行创建应用程序的python源文件时,问题不存在,所以我觉得它必须与py2app导出有关。X11的Tkinter + PIL + py2app = IO错误无法识别图像文件
的问题:当我启动GUI,我第一次尝试加载有效的图像文件,图像无法加载,并且我从PIL图片模块以下错误:
File "Image.pyc", line 1980, in open
IOError: cannot identify image file
当我然后(没有关闭GUI或任何东西)尝试打开完全相同的文件,它加载完美,没有错误或问题。这种情况每次都会发生,我尝试使用任何图像文件 - 第一次加载尝试失败,随后的尝试成功。我应该补充,在第一个错误之后,没有图像文件加载失败 - 即使它们与第一个不同。
一些注意事项: - 图像文件是一个序列,非常大(大约300 MB),所以为了加快加载过程,我使用了mmap。我尝试删除mmap步骤,并直接将常规文件对象传递给ImagePIL.open,并且问题不受影响。
- 我也尝试寻找文件的开始,然后将其提供给ImagePIL.open,但是没有任何效果。 - py2app安装文件很漂亮 - 它只包含一些配置文件和一个图标。
这里是有问题的图像加载功能的相关部分:
import Image as ImagePIL
import mmap as m
...
...
def loadImage(self):
errorLog.debug("Attempting to open image \""+self.filenameVar.get()+"\"")
try:
if self.fileMap is not None:
self.fileMap.close()
imageFile = open(self.filenameVar.get(), 'r')
self.fileMap = m.mmap(imageFile.fileno(), 0, prot=m.PROT_READ)
# self.fileMap.seek(0)
self.imageSeries = ImagePIL.open(self.fileMap)
imageFile.close()
except(IOError):
errorLog.exception("Failed to open image \""+self.filenameVar.get()+"\"")
return
我很为难 - 任何想法?提前致谢!
编辑:我要补充的是Tkinter的,PIL,并且使用的MacPorts 2.1.2,在起飞的机会,帮助安装了py2app。
你真的使用的Tkinter与X11 OSX下?在运行'python setup.py py2app -A'(注意'-A')后它工作吗? – mmgp 2013-02-18 00:27:48
@mmgp:我只是尝试用别名模式构建我的程序py2app,并且问题不会发生!它完美的作品。那为什么会这样呢? **你有什么想法我可以得到这个工作在部署模式**?谢谢!! 哦,是的,我真的在OSX上使用Tkinter X11。我最近发现有一个Tkinter版本在OSX中使用本地窗口,并且正在计划切换到那个版本,但还没有。 – Brionius 2013-02-18 01:03:53
我可以猜测,加载特定图像格式所需的其他库不被包含/找到。我相信你仍然可以加载一个bmp图像,但是如果猜测是正确的,那么PNG图像会失败。我看到有人在将PIL和py2app结合起来时会报告问题,然后搜索它。 – mmgp 2013-02-18 01:21:38