我有一個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