On 14 Sep 2009, at 16:05, pythonmac-sig-requ...@python.org wrote:

Send Pythonmac-SIG mailing list submissions to
        pythonmac-sig@python.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://mail.python.org/mailman/listinfo/pythonmac-sig
or, via email, send a message with subject or body 'help' to
        pythonmac-sig-requ...@python.org

You can reach the person managing the list at
        pythonmac-sig-ow...@python.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Pythonmac-SIG digest..."
Today's Topics:

  1. Re: Pythonmac-SIG Digest, Vol 77, Issue 15 (Geert Dekkers)
  2. Re: Pythonmac-SIG Digest, Vol 77, Issue 15 (Geert Dekkers)

From: Geert Dekkers <ge...@nznl.com>
Date: 14 September 2009 15:44:06 BST
To: pythonmac-sig@python.org
Subject: Re: [Pythonmac-SIG] Pythonmac-SIG Digest, Vol 77, Issue 15


Thanks David. As you suggested, I did a "file" on a python executable, and found that while you are quite correct that python is compiled a 2 way binary on a client 10.5, it's already a 4 way binary on the new xserve I have running 10.5 even though it's version 2.5. I also discovered that pyobjc will not automatically build as a 4 way bin against a 4 way build of python, and if you force it to, (by re-issuing a gcc command adding arch flags for 64 bit ppc and intel) it will complain about a missing architecture in *.o file.

Mostly and I'm working from memory here to make PIL work effectively on 2.0 Python forward you need both numeric and IIRC ImageMagick and Jpeglib. This has gone through several transitions s since I was actively using it. It is worth installing and works very well particularly since you can get the PIL image in and out of numeric nicely. Again from memory you need the third party jpeglib and not the OS X installed one.
HTH
Ed Hartley

I'll try doing a python 2.6 build next, and go from there.

Geert


On 14/09/2009, at 12:00 PM, pythonmac-sig-requ...@python.org wrote:


From: David Warde-Farley <d...@cs.toronto.edu>
Date: 14 September 2009 9:48:02 AM
To: Pythonmac-Sig 3 <pythonmac-sig@python.org>
Subject:


On 13-Sep-09, at 10:58 AM, Geert Dekkers wrote:

The problem is of course that I need to coax PyObjC to be run by 64 bit Apache. I read about the ability for PyObjC to run in 64-bit mode athttp://pyobjc.sourceforge.net/documentation/pyobjc-core/news.html . I don't know where to find out if my python is built with the required MACOSX_DEPLOYMENT_TARGET=10.5, but I would think so (as I'm running 10.5.8). (And you must realise I'm no hard-core programmer -- I learn as I go -- make heaps of mistakes doing so)

I did try a few tricks to get pyobjc to build as full fat binary (that is -arch ppc -arch i386 -arch ppc64 -arch x86_64) but so far no joy.

type="cite">(Actually one of the results was quite discerning: an example "ld warning: in build/temp.macosx-10.5-i386-2.5/Modules/ _sortandmap.o, missing required architecture ppc64 in file
ld warning: in build/temp.macosx-10.5-i386-2.5/Modules/ _sortandmap.o, missing required architecture x86_64 in file")

Neither the Python 2.5 shipped with Leopard nor the Python 2.5 at Python.org are 64-bit builds/include 64 bit support. Try running 'file' on the python executable, you'll see only i386 and ppc.

You'll have to build a Python framework build from source as a 4-way universal (I'd recommend 2.6, as there is a script in the distribution for doing this on the Mac, and it might not even be possible on 2.5). Then you'll be able to build 4-way PyObjC (in fact, it should build that way automatically I think).

And I'm wondering if this is at all necessary. Because -- why can Apache run PIL? ?? -- th full fat, but you can indeed do "import Image"

dekkers-2:~ geert$ file /Library/Python/2.5/site-packages/PIL/ _imaging.so /Library/Python/2.5/site-packages/PIL/_imaging.so: Mach-O universal binary with 2 architectures /Library/Python/2.5/site-packages/PIL/_imaging.so (for architecture i386): Mach-O bundle i386 /Library/Python/2.5/site-packages/PIL/_imaging.so (for architecture ppc7400): Mach-O bundle ppc

But if you do "import _imaging", Apache gives you: "Could not import ccnet.views. Error was: dlopen(/Library/Python/2.5/site- packages/PIL/_imaging.so, 2): no suitable image fo und. Did 5/site- packages/PIL/_imaging.so: no matching architecture in universal wrapper"


My best guess (as I've never poked around in the guts of PIL) is that there is a pure Python version that is slow-as-molasses and then a sped up C version which is used if possible (_imaging.so). PIL invoked from Apache will thus probably use the slow-as-molasses version as the import of _imaging will silently fail somewhere in the Python code but be caught by an exception handler.

David





From: Geert Dekkers <ge...@nznl.com>
Date: 14 September 2009 16:05:13 BST
To: pythonmac-sig@python.org
Subject: Re: [Pythonmac-SIG] Pythonmac-SIG Digest, Vol 77, Issue 15


UPDATE: Sorry, I was wrong. Client and server are equal in this respect. Look:

geert-dekkerss-macbook-pro:~ geert$ file /System/Library/Frameworks/ Python.framework/Versions/2.5/Python /System/Library/Frameworks/Python.framework/Versions/2.5/Python: Mach-O universal binary with 4 architectures /System/Library/Frameworks/Python.framework/Versions/2.5/Python (for architecture ppc7400): Mach-O dynamically linked shared library ppc /System/Library/Frameworks/Python.framework/Versions/2.5/Python (for architecture ppc64): Mach-O 64-bit dynamically linked shared library ppc64 /System/Library/Frameworks/Python.framework/Versions/2.5/Python (for architecture i386): Mach-O dynamically linked shared library i386 /System/Library/Frameworks/Python.framework/Versions/2.5/Python (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 geert-dekkerss-macbook-pro:~ geert$ file /System/Library/Frameworks/ Python.framework/Versions/2.5/bin/python2.5 /System/Library/Frameworks/Python.framework/Versions/2.5/bin/ python2.5: Mach-O universal binary with 2 architectures /System/Library/Frameworks/Python.framework/Versions/2.5/bin/ python2.5 (for architecture ppc7400): Mach-O executable ppc /System/Library/Frameworks/Python.framework/Versions/2.5/bin/ python2.5 (for architecture i386): Mach-O executable i386 geert-dekkerss-macbook-pro:~ geert$ file /System/Library/Frameworks/ Pyth on.frame hon /System/Library/Frameworks/Python.framework/Versions/2.5/bin/python: Mach-O universal binary with 2 architectures /System/Library/Frameworks/Python.framework/Versions/2.5/bin/python (for architecture ppc7400): Mach-O executable ppc /System/Library/Frameworks/Python.framework/Versions/2.5/bin/python (for architecture i386): Mach-O executable i386

Python -- with a capital P -- is 4 way, lowercase python 2 way. Would Python contain classes, called by python or python2.5???

Geert


On 14/09/2009, at 12:00 PM, pythonmac-sig-requ...@python.org wrote:


From: David Warde-Farley <d...@cs.toronto.edu>
Date: 14 September 2009 9:48:02 AM
To: pythonmac-sig@python.org>
Subject: Re: [Pythonmac-SIG] django webapp using CoreGraphics complains about "wrong architecture"


On 13-Sep-09, at 10:58 AM, Geert Dekkers wrote:

The problem is of course that I need to coax PyObjC to be run by 64 bit Apache. I read about the ability for PyObjC to run in 64- bit mode athttp://pyobjc.sourceforge.net/documentation/pyobjc-core/news.html . I don't know where to find out if my python is built with the required MACOSX_DEPLOYMENT_TARGET=10.5 , but I nning 10.5.8). (And you must realise I'm no hard-core programmer -- I learn as I go -- make heaps of mistakes doing so)

I did try a few tricks to get pyobjc to build as full fat binary (that is -arch ppc -arch i386 -arch ppc64 -arch x86_64) but so far no joy.

(Actually one of the results was quite discerning: an example "ld warning: in build/temp.macosx-10.5-i386-2.5/Modules/_sortandmap.o, missing required architecture ppc64 in file ld warning: in build/temp.macosx-10.5-i386-2.5/Modules/ _sortandmap.o, missing required architecture x86_64 in file")

Neither the Python 2.5 shipped with Leopard nor the Python 2.5 at Python.org are 64-bit builds/include 64 bit support. Try running 'file' on the python executable, you'll see only i386 and ppc.

You'll have t o build from source as a 4-way universal (I'd recommend 2.6, as there is a script in the distribution for doing this on the Mac, and it might not even be possible on 2.5). Then you'll be able to build 4-way PyObjC (in fact, it should build that way automatically I think).

And I'm wondering if this is at all necessary. Because -- why can Apache run PIL??? -- the .so files are also not full fat, but you can indeed do "import Image"

dekkers-2:~ geert$ file /Library/Python/2.5/site-packages/PIL/ _imaging.so /Library/Python/2.5/site-packages/PIL/_imaging.so: Mach-O universal binary with 2 architectures /Library/Python/2.5/site-packages/PIL/_imaging.so (for architecture i386): Mach-O bundle i386 /Libr ary/Pyth _imaging.so (for architecture ppc7400): Mach-O bundle ppc

But if you do "import _imaging", Apache gives you: "Could not import ccnet.views. Error was: dlopen(/Library/Python/2.5/site- packages/PIL/_imaging.so, 2): no suitable image found. Did find: / Library/Python/2.5/site-packages/PIL/_imaging.so: no matching architecture in universal wrapper"


My best guess (as I've never poked around in the guts of PIL) is that there is a pure Python version that is slow-as-molasses and then a sped up C version which is used if possible (_imaging.so). PIL invoked from Apache will thus probably use the slow-as-molasses version as the import of _imaging will silently fail somewhere in the Python code but be caught by an exception handler.

David





_______________________________________________
Pythonmac-SIG maillist  -  Pythonmac-SIG@python.org
http://mail.python.org/mailman/listinfo/pythonmac-sig

Reply via email to