我尝试导出到 py2app 的 python 程序(python 2.7.3、X11 Tkinter、py2app 0.6.4、MacOS X 10.7.4)有问题。该问题仅在程序的独立 py2app-ified 应用程序版本中开始出现。当我运行创建应用程序的python源文件时,问题不存在,所以我觉得它一定与py2app导出有关。
问题:当我启动 GUI 时,我第一次尝试加载有效的图像文件时,图像无法加载,并且我从 PIL Image 模块收到以下错误:
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 和 py2app 是使用 MacPorts 2.1.2 安装的,这很有帮助。