py2app semi-standalone semi-works
James Stroud
jstroud at mbi.ucla.edu
Wed Oct 4 16:35:12 EDT 2006
Dave Opstad wrote:
> In article <ulMUg.13149$7I1.6975 at newssvr27.news.prodigy.net>,
> James Stroud <jstroud at mbi.ucla.edu> wrote:
>>I am trying to create a semi-standalone with the vendor python on OS X
>>10.4 (python 2.3.5). I tried to include some packages with both
>>--packages from the command and the 'packages' option in setup.py. While
>>the packages were nicely included in the application bundle in both
>>cases (at Contents/Resources/lib/python2.3/), they were not found by
>>python when the program was launched, giving the error:
>>
>> "ImportError: No module named [whatever module]"
>
> You might want to have a setup.cfg file in addition to the setup.py
> file. I've found that helps ensure the relevant packages and includes
> make it into the bundled application.
>
> For example, say you have a package named fred and also a separate
> module named george that are needed for your app. Your setup.cfg could
> look like this:
>
> #
> # setup.cfg
> #
>
> [py2app]
> packages=fred
> includes=george
>
> You can also have a section for [py2exe] if needed; that way, if there
> are modules that your Windows build needs that the Mac build doesn't (or
> vice versa), you can just include them where needed.
>
> Dave
Hi Dave,
Thank your for pointing me to setup.cfg. I make standalones for windows,
linux, and OS X, so it will definitely help take some of the confusion
out of my setup.py.
However, when passing trying to build semi-standalone, the module does
make it into the application bundle, but the python interpreter doesn't
seem to know where to find it. Is there something I can specify in
setup.cfg or setup.py that will point the interpreter to the included
module, or will I need to make another test and programmatically set
sys.path inside of my python code? If this is solved by setup.cfg, then
forgive me--I haven't had a chance to try it yet.
Below is the relevant part of my setup.py.
James
=====
APP = ['%s.py' % appname]
DATA_FILES = []
OPTIONS = {
'argv_emulation' : True,
'strip' : True,
'packages' : packages,
'iconfile' : '%s.icns' % appname,
}
if not os.path.exists('dist'):
setup(
app=APP,
name=appname,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
else:
print 'Directory "dist" exists. Doing nothing.'
=====
--
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095
http://www.jamesstroud.com/
More information about the Python-list
mailing list