Python LOC, .exe size, and refactoring
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Wed Feb 22 00:29:27 EST 2012
On Tue, 21 Feb 2012 19:51:07 -0800, CM wrote:
> I have an application that I was hoping to reduce a bit the size of its
> .exe when "packaged" with py2exe. I'm removing some Python modules such
> as Tkinter, etc., but now wonder how much I could size I could reduce by
> refactoring--and therefore shortening--my code.
Well that will depend on how much you refactor it, but frankly, unless
your code is truly awful, this will be a micro-optimization. py2exe
bundles a Python runtime environment plus your files into a single exe
file. Typically the runtime environment will be somewhere around 11MB for
wxPython GUI apps (or 4MB with compression turned on, which will slow
your application down).
http://www.py2exe.org/index.cgi/SingleFileExecutable
The runtime environment for Oracle's Java environment starts at 7MB and
is typically 15MB, plus whatever libraries your own code produces. For
dot-net applications, the framework can be up to 60MB.
http://weblogs.java.net/blog/stanleyh/archive/2005/05/deployment_unde.html
http://www.hanselman.com/blog/SmallestDotNetOnTheSizeOfTheNETFramework.aspx
While I think 60MB for a basic calculator app is taking the piss, this is
2011 not 1987 and we don't have to support floppy disks any more. 11MB
for a GUI app is nothing to be worried about. That takes, what, 3 minutes
to download even on a 512 kbps link?
> Is there a rule of thumb that predicts the relationship between the
> number of lines of Python code and the resultant size of the application
> (leaving aside the size of imported modules)?
Yes. To a close approximation, for most applications:
size of bundled application = (
size of Python runtime environment + size of libraries used
)
Your code is most likely insignificant compared to the others.
> Or is there a way to
> roughly estimate how much would refactoring the code as much as I
> reasonably can help? (For example, in some cases there is some cut and
> paste coding...I know, it's bad).
Look at it this way: take the .pyc file from your code. How big is it?
Say, it's 200K. That's a BIG file -- the decimal module in the standard
library is only 152K. Suppose you could cut it in half -- you would save
100K. Even if you could somehow cut it down to 1K, you've saved less than
200K. Do you care?
Refactoring your code is double-plus good for maintainability. You should
do it anyway. But don't do it to shrink an 11MB exe down to 10.8MB.
--
Steven
More information about the Python-list
mailing list