[Pythonmac-SIG] py2app and universal TkAqua
kw at kevin-walzer.com
Fri Jul 14 00:14:22 CEST 2006
-----BEGIN PGP SIGNED MESSAGE-----
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
>>> 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
>>> 1. remove your existing installation of py2app::
>>> rm -rf
>>> 2. install setuptools
>>> 3. sudo easy_install py2app
>>> 4. Change the setup.py::
>>> # used to be "from distutils.core import setup"
>>> from setuptools import setup
>>> # this is actually useless...
>>> options=dict(py2app=dict(frameworks=['Tcl', 'Tk'])),
>>> # this is new
>>> 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.:
>>> I didn't bother trying to preserve the history, so don't bother trying
>>> to svn switch.
>> 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 \
> 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.
That works. Thanks.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
-----END PGP SIGNATURE-----
More information about the Pythonmac-SIG