On Oct 13, 2004, at 8:01 AM, Thomas Heller wrote:
"Fredrik Lundh" <fredrik@pythonware.com> writes:
Thomas Heller wrote:
To be honest, I'm against code in the core that depends on whether pywin32 is installed or not.
does py2exe support "if 0" blocks?
py2exe uses modulefinder to scan the byte code of compiled modules, and Python doesn't generate code for 'if 0' blocks, so, yes.
just one more question: is there a specific problem with win32all? if this is a general problem, how do you deal with other optional modules in the standard library (e.g. _xmlrpclib) ?
If _xmlrpclib is installed, py2exe will find it if the script uses xmlrpclib. I guess that is what the user expects. If _xmlrpclib is not installed, py2exe will warn that it is missing (this warning is probably not very useful, and it seems Bob has supressed this warning in py2app).
I have disabled all missing module warnings, because I've found that are more of a nuisance than anything else. However, I have made it possible to generate a GraphViz DOT graph of everything that did get included, which is useful when you are having problems with too many or too few dependencies being included. Unlike modulefinder, py2app.modulegraph keeps track of why modules have been included, so it's easy enough to say that "pydoc should not depend on Tkinter", and Tkinter won't be included unless something else needs it. For cases like xmlrpclib->_xmlrpclib or xml -> _xmlplus, with a semi-standalone build (depends on an existing Python installation), a dotted edge will be drawn between the module that uses xmlrpclib and _xmlrpclib. The graph output only includes modules that ended up in the application bundle, so the edge is dotted to represent that the dependency exists, but was indirect (since xmlrpclib would not have been shown). That said, if you really wanted to display missing modules, you could find them pretty easily from the ModuleGraph instance, just walk it and keep instances of MissingModule. -bob