[Pythonmac-SIG] py2app and universal TkAqua
bob at redivi.com
Thu Jul 13 23:01:22 CEST 2006
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
>>> 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
>> 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
>> 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
>> 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__'` .
-change /System/Library/Frameworks/Tcl.framework/Versions/8.4/Tcl \
-change /System/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.
More information about the Pythonmac-SIG