Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python X11 Tkinter和x2B;PIL&x2B;py2app=IOError无法识别图像文件_Python_Tkinter_Python Imaging Library_Py2app_Ioerror - Fatal编程技术网

Python X11 Tkinter和x2B;PIL&x2B;py2app=IOError无法识别图像文件

Python X11 Tkinter和x2B;PIL&x2B;py2app=IOError无法识别图像文件,python,tkinter,python-imaging-library,py2app,ioerror,Python,Tkinter,Python Imaging Library,Py2app,Ioerror,我试图导出到py2app的python程序(python 2.7.3、X11 Tkinter、py2app 0.6.4、MacOS X 10.7.4)有问题。该问题仅在程序的独立py2app版本中开始出现。当我运行创建应用程序的python源文件时,问题并不存在,因此我觉得它一定与py2app导出有关 问题:当我启动GUI时,第一次尝试加载有效的图像文件时,图像加载失败,我从PIL图像模块得到以下错误: File "Image.pyc", line 1980, in open IOError:

我试图导出到py2app的python程序(python 2.7.3、X11 Tkinter、py2app 0.6.4、MacOS X 10.7.4)有问题。该问题仅在程序的独立py2app版本中开始出现。当我运行创建应用程序的python源文件时,问题并不存在,因此我觉得它一定与py2app导出有关

问题:当我启动GUI时,第一次尝试加载有效的图像文件时,图像加载失败,我从PIL图像模块得到以下错误:

File "Image.pyc", line 1980, in open
IOError: cannot identify image file
然后,当我(不关闭GUI或任何东西)尝试打开完全相同的文件时,它可以完美地加载,没有错误或问题。每次我尝试加载任何图像文件时都会发生这种情况—第一次加载失败,后续尝试成功。我应该补充一点,在第一个错误之后,没有任何图像文件无法加载——即使它们与第一个不同

请注意: -图像文件是一个序列,非常大(大约300 MB),因此为了加快加载过程,我使用了mmap。我已尝试删除mmap步骤,并将常规文件对象直接交给ImagePIL。直接打开它,问题不会受到影响。
-在将文件提交给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安装的,这可能会有所帮助。

py2app似乎没有将PIL的图像插件包括在应用程序包中,即使其中一个py2app配方试图确保它们被包括在内

您可以尝试使用“python setup.py py2app--packages=PIL”构建,然后使用“import PIL.Image as ImagePIL”来使用它


我还不明白为什么PIL配方不起作用,这可能是MacPorts构建python包的方式(我自己不使用MacPorts)。

似乎py2app没有将PIL的图像插件包括在应用程序包中,即使其中一个py2app配方试图确保它们被包括在内

您可以尝试使用“python setup.py py2app--packages=PIL”构建,然后使用“import PIL.Image as ImagePIL”来使用它


我还不明白为什么PIL配方不起作用,它可能是MacPorts构建python包的方式(我自己不使用MacPorts)。

问题是Pillow版本3.0.0和py2app之间不一致的结果

我建议两种方法来避免PIL(枕头)

  • 使用opencv而不是PIL
  • 卸载当前版本的Pillow,然后安装以前的版本,如1.7.8

  • 问题是Pillow版本3.0.0和py2app之间不一致的结果

    我建议两种方法来避免PIL(枕头)

  • 使用opencv而不是PIL
  • 卸载当前版本的Pillow,然后安装以前的版本,如1.7.8

  • 你真的在OSX下使用TXINTER和X11吗?运行
    python setup.py py2app-A
    (注意
    -A
    )后,它是否工作?@mmgp:我刚刚尝试在别名模式下使用py2app构建程序,但问题没有出现!!!它工作得很好。究竟为什么会这样?你知道我怎样才能让它在部署模式下工作吗?谢谢哦,是的,我真的在OSX上使用Tkinter X11。我最近发现有一个Tkinter版本在OSX中使用本机窗口,我正计划切换到这个版本,但还没有。我可以猜测加载特定图像格式所需的其他库没有被包括/找到。我相信您仍然可以加载bmp图像,但如果猜测正确,png图像将失败。我见过有人报告在组合PIL和py2app时出现问题,请搜索它。@mmgp:我会尝试,尽管同一个图像文件第一次加载失败,第二次加载成功,所以我不认为这可能是一个库包含问题。谢谢你的帮助!我没有看到这一点,所以你可以忽略这一部分的评论。你真的在OSX下使用TXINTER和X11吗?运行
    python setup.py py2app-A
    (注意
    -A
    )后,它是否工作?@mmgp:我刚刚尝试在别名模式下使用py2app构建程序,但问题没有出现!!!它工作得很好。究竟为什么会这样?你知道我怎样才能让它在部署模式下工作吗?谢谢哦,是的,我真的在OSX上使用Tkinter X11。我最近发现有一个Tkinter版本在OSX中使用本机窗口,我正计划切换到这个版本,但还没有。我可以猜测加载特定图像格式所需的其他库没有被包括/找到。我相信您仍然可以加载bmp图像,但如果猜测正确,png图像将失败。我见过有人报告在组合PIL和py2app时出现问题,请搜索它。@mmgp:我会尝试,尽管同一个图像文件第一次加载失败,第二次加载成功,所以我不认为这可能是一个库包含问题。谢谢你的帮助!我没有看到,所以你可以忽略评论的这一部分。谢谢你的回答-不幸的是,这并没有解决问题。还是被这个难住了!喜欢有更多的答案-有没有人有其他想法?谢谢你的答案-不幸的是,这并没有解决问题。还是被这个难住了!喜欢有更多的答案-有人有其他想法吗?