[Pythonmac-SIG] PIL and Snow Leopard

Jerry LeVan jerry.levan at eku.edu
Mon Oct 5 02:25:29 CEST 2009


>>
>> On Oct 2, 2009, at 7:40 PM, Bill Janssen wrote:
>>
>>> Jerry LeVan <jerry.levan at eku.edu> wrote:
>>>
>>>> Is building PIL on Snow Leopard 'easy' I have the apple python
>>>> (32/64)
>>>> installed and the python.org 2.6.2 (32 bit) version installed.
>>>
>>> Yes, I just build it with /usr/bin/python, and it works fine.
>>> Assuming
>>> you have Xcode 3.2 installed.
>>>
>>> Bill
>>
>> Ugh, this is getting messy...
>>
>> I think that I have built libfreetype.dylib and libjpeg.dylib as
>> i386 and x86_64 libs...at least that is what the file command  
>> asserts.
>>
>> I then built the PIL package using the system python in 64 bit mode  
>> and
>> installed the rascal in the Apple python. All of the libs appear to  
>> be
>> multi-architecture ppc, i386 and x86_64
>>
>> When I run apple python in 64 bit mode I can run the PIL demos...
>>
>> If I restrict apple python to 32 bit mode all of the programs fail
>> with a bus error.
>>
>> *********
>>
>> I then tried to build PIL using the 2.6.2 python from python.org.
>> 1) It would not build under gcc-4.2 I had to define CC=gcc-4.0
>>     the build appeared to succeed and I installed the PIL system.
>> 2) All of the demos failed...
>>
>> I noticed that _imagingtk.so was dynamically linked against
>> the ActiveState Tcl/Tk that is installed in /Library/Frameworks/
>> Tcl.framework
>>
>> [mbp:/Library/Python/2.6/site-packages/PIL]$ otool -L _imagingtk.so
>> _imagingtk.so:
>> 	/Library/Frameworks/Tcl.framework/Versions/8.5/Tcl (compatibility
>> version 8.5.0, current version 8.5.4)
>> 	/Library/Frameworks/Tk.framework/Versions/8.5/Tk (compatibility
>> version 8.5.0, current version 8.5.4)
>> 	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
>> version 124.1.1)
>>
>> I suppose that I could hide the ActiveState versions by renaming the
>> Frameworks...
>>
>> But even if I did that, how could I force setup.py to use the apple
>> 8.4 tcl/tk system instead
>> of the 'current' 8.5 system?
>>
>> Any suggestions as to how I can get PIL to work when apple python is
>> in 32 bit mode?
>>
>> Any suggestions as to how I can build PIL using the 2.6.2 version of
>> Python from python.org?
>>
>> This is getting ugly...too many impedance mismatches.
>>
>> Jerry
>>
>
> A little more success to report. ..
>
> I hid the activestate tcl/tk frameworks in /Library/Frameworks and  
> set CC to gcc-4.0
> and rebuilt PIL and otool showed that _imagingtk.so was linked  
> against the apple 8.4
> Tcl/Tk system.
>
> So I installed the build and "tada" Imaging appears to be working in python.org 
>  version
> of python (2.6.2).
>
> So this leaves only the "why does apple python (2.6.1) not work when  
> run in 32 bit mode
> but does in 64 bit mode"  question open...
>
> Has anyone had success with PIL in this case?
>
> Thanks
>
> Jerry

When I run the Apple Python in 32  bit mode I get a bus error at the  
same place when I try
to display an image using PIL .  Here is part of the dump.

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000028
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   com.tcltk.tklibrary           	0x13a1850b Tk_GetImageMasterData + 17
1   com.tcltk.tklibrary           	0x13a20cab Tk_FindPhoto + 37
2   _imagingtk.so                 	0x007faacf PyImagingPhotoPut + 95
3   com.tcltk.tcllibrary          	0x138d3d64 TclInvokeStringCommand +  
101
4   com.tcltk.tcllibrary          	0x00489977 Tcl_CreateInterp + 4919
5   com.tcltk.tcllibrary          	0x0048a96c Tcl_EvalObjv + 72
6   _tkinter.so                   	0x001e449d Tkapp_CallDeallocArgs +  
11750
7   org.python.python             	0x0008b372 PyEval_EvalFrameEx + 16375
8   org.python.python             	0x0008cf64 PyEval_EvalCodeEx + 1720
9   org.python.python             	0x0008b591 PyEval_EvalFrameEx + 16918
10  org.python.python             	0x0008cf64 PyEval_EvalCodeEx + 1720
11  org.python.python             	0x0002ee2c PyClassMethod_New + 1823
12  org.python.python             	0x0000c700 PyObject_Call + 101
13  org.python.python             	0x0001c12e PyClass_New + 1603
14  org.python.python             	0x0000c700 PyObject_Call + 101
15  org.python.python             	0x0008677a  
PyEval_CallObjectWithKeywords + 171
16  org.python.python             	0x0001ba58 PyInstance_New + 290
17  org.python.python             	0x0000c700 PyObject_Call + 101
18  org.python.python             	0x0008c802 PyEval_EvalFrameEx + 21639
19  org.python.python             	0x0008cf64 PyEval_EvalCodeEx + 1720
20  org.python.python             	0x0002ee2c PyClassMethod_New + 1823
21  org.python.python             	0x0000c700 PyObject_Call + 101
22  org.python.python             	0x0001c12e PyClass_New + 1603
23  org.python.python             	0x0000c700 PyObject_Call + 101
24  org.python.python             	0x0008677a  
PyEval_CallObjectWithKeywords + 171
25  org.python.python             	0x0001ba58 PyInstance_New + 290
26  org.python.python             	0x0000c700 PyObject_Call + 101
27  org.python.python             	0x0008c802 PyEval_EvalFrameEx + 21639
28  org.python.python             	0x0008cf64 PyEval_EvalCodeEx + 1720
29  org.python.python             	0x0008d009 PyEval_EvalCode + 87
30  org.python.python             	0x000a40bb Py_CompileString + 111
31  org.python.python             	0x000a4167 PyRun_FileExFlags + 139
32  org.python.python             	0x000a5e8a PyRun_SimpleFileExFlags  
+ 814
33  org.python.python             	0x000b3168 Py_Main + 3074
34  org.python.python.app         	0x00001eb5 start + 53

The crash occurs at the same 'place' every time...

If I run the Apple Python in 64 bit mode or the python.org Python ( 32  
bit carbon 2.6.2 )image displaying, ie PIL,  works fine :)

Sorta strange...

Here is a sample program that can be used...

#!/usr/bin/env python
# Author: Jerry LeVan
from Tkinter import *
import Image, ImageTk
import StringIO
from tkMessageBox import *

class ShowImage:
	
   def build_scrolled_canvas(self,parent):

      canvas=Canvas(parent)

      sy = Scrollbar(parent, command=canvas.yview)
      sx = Scrollbar(parent, orient=HORIZONTAL,
                     command= canvas.xview)
      canvas.configure(yscrollcommand=sy.set,xscrollcommand=sx.set)
      canvas.grid(row=0,column=0,sticky=NSEW)
      sy.grid(row=0,column=1,stick=N+S)
      sx.grid(row=1,column=0,sticky=E+W)
      parent.columnconfigure(0,weight=1)
      parent.rowconfigure(0,weight=1)
      return canvas

   def __init__(self, theStr):
     self.theStr = theStr
     self.theWin = Toplevel()
     self.theWin.title('Image Viewer')
     self.theFrame = Frame(self.theWin)
     self.theCanvas = self.build_scrolled_canvas(self.theFrame)
     self.theButton= Button 
(self.theWin,text="Close",command=self.theWin.destroy)
     self.theFrame.pack(side=TOP, expand=TRUE, fill=BOTH)
     self.theButton.pack(side=TOP)
     try:
          self.im = Image.open(StringIO.StringIO(self.theStr))
          (width,height) = self.im.size
          self.tkim = ImageTk.PhotoImage(self.im)
          self.theCanvas.create_image(0,0,image=self.tkim,anchor=NW)
          self.theCanvas['scrollregion'] = (0,0,width,height)
     except Exception, e :
          showerror(title="Error",message="image problem: "+str(e))
          self.theWin.destroy()

if __name__ == '__main__':
     theStr = open(sys.argv[1],'rb').read()
     thePic = ShowImage(theStr)
     myPic = ShowImage(theStr)
     mainloop()

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pythonmac-sig/attachments/20091004/f5fdd8ab/attachment.htm>


More information about the Pythonmac-SIG mailing list