[Pythonmac-SIG] py2app and universal TkAqua

Kevin Walzer kw at kevin-walzer.com
Fri Jul 14 00:14:22 CEST 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Bob Ippolito wrote:
> 
> On Jul 13, 2006, at 1:44 PM, Kevin Walzer wrote:
> 
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Bob Ippolito wrote:
>>>
>>> On Jul 6, 2006, at 4:06 PM, Kevin Walzer wrote:
>>>
>>>> I have been unable to build the "hello-tk" demo that ships with py2app
>>>> if I am building against a "universal" build of Tcl/Tk.
>>>>
>>>> Here is my setup:
>>>>
>>>> from distutils.core import setup
>>>> import py2app
>>>>
>>>> setup(
>>>>     app=['hello.py'],
>>>>     options=dict(
>>>>         py2app=dict(
>>>>             archs="ppc,i386",
>>>>
>>>> frameworks=["/Library/Frameworks/Tcl.framework","/Library/Frameworks/Tk.framework"]
>>>>
>>>>
>>>>             )
>>>>         )
>>>>     )
>>>
>>> I gave up on that broken universal support in 0.2.x and cleaned up what
>>> I had in the trunk (0.3). The way it hooks into distutils now (via
>>> setuptools) is totally different so it needs a change to your setup
>>> files.
>>>
>>> 1. remove your existing installation of py2app::
>>>
>>>     rm -rf
>>> /Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/py2app
>>>     rm
>>> /Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/py2app.pth
>>>
>>>
>>> 2. install setuptools
>>> <http://bob.pythonmac.org/archives/2006/01/17/single-line-setuptools-install/>
>>>
>>>
>>> 3. sudo easy_install py2app
>>> 4. Change the setup.py::
>>>
>>>     # used to be "from distutils.core import setup"
>>>     from setuptools import setup
>>>     setup(
>>>         app=['hello.py'],
>>>         # this is actually useless...
>>>         options=dict(py2app=dict(frameworks=['Tcl', 'Tk'])),
>>>         # this is new
>>>         setup_requires=['py2app'],
>>>     )
>>>
>>> Explicitly specifying the Tcl and Tk frameworks is pointless because the
>>> Tkinter extension either links to them or it doesn't. If it does link to
>>> them, py2app will find them and include them. If it doesn't link to them
>>> (or it links to the /System version, for example) then it still won't
>>> use them even if they are present in the app bundle.
>>>
>>> FYI, the repositories for py2app, macholib, bdist_mpkg, altgraph have
>>> all moved to svn.pythonmac.org, e.g.:
>>> http://svn.pythonmac.org/py2app/py2app/trunk/
>>>
>>> I didn't bother trying to preserve the history, so don't bother trying
>>> to svn switch.
>>>
>>> -bob
>>>
>>
>> This new approach seems to work well. I've tested it not just with the
>> basic demo but with a different script that incorporates a Tk-specific
>> extension with a Python wrapper (Tile). Thank you.
>>
>> My only reason for wanting to use a universal build of Tcl/Tk is to
>> avoid things breaking if the application runs on a later version of OS X
>> with a later version of Tcl/Tk installed in /System. Can the tkinter
>> module accommodate a later 8.4.x build of Tcl/Tk without breaking?
> 
> It probably can, but you'd have to jigger its install_name in order to
> make that happen.
> 
> In your project you could probably do this:
> 
> cp `python -c 'print __import__("_tkinter").__file__'` .
> install_name_tool \
>     -change /System/Library/Frameworks/Tcl.framework/Versions/8.4/Tcl \
>             /Library/Frameworks/Tcl.framework/Versions/8.4/Tcl \
>     -change /System/Library/Frameworks/Tk.framework/Versions/8.4/Tk \
>             /Library/Frameworks/Tk.framework/Versions/8.4/Tk \
>     _tkinter.so
> 
> That will make a copy of _tkinter.so and rewrite its load commands such
> that it points at your version of Tcl/Tk instead of the system's. Since
> it will be a sibling of your main script, it will be on sys.path before
> the standard library and py2app should pick it up instead of the stdlib
> version of _tkinter. macholib will see the Tcl and Tk frameworks and
> should do the right thing.
> 
> -bob


That works. Thanks.


- --
Kevin Walzer
Poetic Code
http://www.kevin-walzer.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFEtsW+rTC5hIgjqTMRAvg8AJ4jfD+UGJY3OnXLe4Iax0wMqvXeZACgkrPI
JlsyplIxmYhYywuInIYydBc=
=hZO4
-----END PGP SIGNATURE-----


More information about the Pythonmac-SIG mailing list