Package: bbfreeze
Authors:Ralf Schmitt <ralf@systemexit.de>Version:1.1.3Date:2014-01-20Download:https://pypi.python.org/pypi/bbfreeze/#downloadsCode:https://github.com/schmir/bbfreezeNotebbfreeze currently does not have a maintainer. If that doesn’t scare you off, read on!Overviewbbfreeze creates stand-alone executables from python scripts. It’s
similar in purpose to the well knownpy2exefor windows,py2appfor
OS X,PyInstallerandcx_Freeze(in fact ancient versions were based
on cx_Freeze. And it uses themodulegraphpackage, which is also used by
py2app).It has the following features:easy installationbbfreeze can be installed with setuptools’ easy_install command.zip/egg file import trackingbbfreeze tracks imports from zip files and includes whole egg files
if some module is used from an eggfile. Packages using setuputils’
pkg_resources module will now work (new in 0.95.0)binary dependency trackingbbfreeze will track binary dependencies and will include DLLs and
shared libraries needed by a frozen program.multiple script freezingbbfreeze can freeze multiple scripts at once.python interpreter includedbbfreeze will create an extra executable named ‘py’, which might be
used like the python executable itself.automatic pathname rewritingpathnames in tracebacks are replaced with relative pathnames
(i.e. if you import package foo.bar from /home/jdoe/pylib/
tracebacks generated from functions in foo.bar will not show your
local path /home/jdoe/pylib/foo/bar.py. They will instead show
foo/bar.py)distutils command ‘bdist_bbfreeze’A new distutils/setuptools command bdist_bbfreeze integrates
bbfreeze into your setup.py.bbfreeze works on windows and UNIX-like operating systems. bbfreeze
has been tested with python 2.4, 2.5, 2.6 and 2.7 bbfreeze will not
work with python 3 or higher. bbfreeze does not work on OS X.Contact Informationbbfreeze has been developed bybrainbot technologies AG. Questions
and suggestions should be send to the bbfreeze-users mailing list:bbfreeze-users@googlegroups.comYou can subscribe by sending email tobbfreeze-users+subscribe@googlegroups.comAn archive is available athttp://groups.google.com/group/bbfreeze-usersYou can also reach the author via email toralf@systemexit.deSourceWindows Eggs and the source code can be downloaded fromhttps://pypi.python.org/pypi/bbfreeze/.The source code is maintained in a git repository on github:https://github.com/schmir/bbfreezeUse:git clone https://github.com/schmir/bbfreeze.gitto create a copy of the repository, then:git pullinside the copy to receive the latest version.InstallationYou need to have setuptools/easy_install installed. Installation
should be as easy as typing:easy_install bbfreezeThis should download bbfreeze and it’s dependencies modulegraph and
altgraph and install them.Limitationsdocumentation is a bit sparsebbfreeze - command line toolbbfreeze provides a command line utility called bbfreeze, which
freezes all python scripts given on the command line into the
directory dist, which then contains for each script an executable and
all dependencies needed by those executables.Example Usage:$ cat hello-world.py
#! /usr/bin/env python

import sys
import email

print unicode("hello", "utf8"), unicode("world!", "ascii")

print "sys.path:", sys.path
print "__file__:", __file__
print "__name__:", __name__

print "locals():", locals()

print "sys.argv", sys.argv
print "sys.executable:", sys.executable
$ bbfreeze hello-world.py
WARNING: found encodings in multiple directories. Assuming it's a namespace package. (found in /home/ralf/py27/lib/python2.7/encodings, /usr/lib/python2.7/encodings)
*** applied <function recipe_doctest at 0x1f01aa0>
*** applied <function recipe_time at 0x1f01de8>
*** applied <function recipe_urllib at 0x1f01c08>
RPATH ${ORIGIN}:${ORIGIN}/../lib is fine
$ dist/hello-world
hello world!
sys.path: ['/home/ralf/bbfreeze/tests/dist/library.zip', '/home/ralf/bbfreeze/tests/dist']
__file__: hello-world.py
__name__: __main__
locals(): {'__builtins__': <module '__builtin__' (built-in)>, '__file__': 'hello-world.py', '__package__': None, 'sys': <module 'sys' (built-in)>, 'email': <module 'email' from '/home/ralf/bbfreeze/tests/dist/library.zip/email/__init__.pyc'>, '__name__': '__main__', '__doc__': None}
sys.argv ['/home/ralf/bbfreeze/tests/dist/hello-world']
sys.executable: /home/ralf/bbfreeze/tests/dist/hello-world
$ dist/py
Python 2.7.2 (default, Nov 21 2011, 17:25:27)
[GCC 4.6.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(MyConsole)
>>> import email
>>>bdist_bbfreeze - distutils commandbbfreeze provides a distutils command which works much like the
‘bbfreeze’ command line tool, but integrates nicely into distutils
and setuptools. It collects all ‘console_scripts’ ‘gui_scripts’
entry-points, generates the wrapper scripts (like easy_install would
do) and freezes these scripts.After installing bbfreeze, every setup.py which used setuptools, has a
new command ‘bdist_bbfreeze’. To show the help message just run:python setup.py bdist_bbfreeze --helpUsage examples:# freeze all scripts into ./dist/<egg_name>-<egg_version>/
python setup.py bdist_bbfreeze

# same, but use tagging for "daily build" or "snapshot" releases
python setup.py egg_info --tag-build=dev bdist_bbfreezebbfreeze - APIThe preferred way to use bbfreeze is by writing short python scripts,
which use bbfreeze’s API. Let’s start with a short example:from bbfreeze import Freezer
f = Freezer("hello-world-1.0", includes=("_strptime",))
f.addScript("hello-world.py")
f.addScript("hello-version.py")
f()    # starts the freezing processbbfreeze.Freezer(distdir=”dist”, includes=(), excludes=())instantiates a Freezer object. It will create the frozen executables
and dependencies inside thedistdirdirectory.includesis a list
or tuple of modules to include,excludesis a list or tuple of
modules to exclude. Note that the freezer willdeletethe directorydistdirbefore freezing!bbfreeze.Freezer objects have the following members:use_compression: flag whether to use compression inside the created
zipfile (default True).include_py: flag whether to create the included python interpreterpy(default True)addScript(path, gui_only=False): register a python script for
freezing.pathmust be the path to a python script.
The freezer will scan the file for dependencies and will create an
executable with the same name indistdir. Thegui_onlyflag only
has a meaning on windows: If set, the executable created for this
script will not open a console window.RecipesRecipes provide a way to control the freezing process. Have a look at
bbfreeze/recipes.py if you need to implement your own. Note that the
API might change.Linux NotesThe glibc version on the system used for freezing will generally be
the minimum glibc version required to run the binaries.gtk, gdk, pango, glib shared libraries will not be copied by the
freezing process. Those need a rather complicated runtime system and
copying them would probably only lead to problems.Windows Notesbinaries created with python 2.6 or 2.7 will need the Microsoft Visual
C++ 2008 Redistributable Package (either the32bitor the64bitversion) installed on the target machine.Change-Log2014-01-20         release 1.1.3Excluding Crypt32.dllAdd support for SunOS (tested on SmartOS)Added current python executable path to allow freezing even if
python is not installed (portable python, buildout)2013-07-17         release 1.1.2fix extension loader on python 2.42013-07-14         release 1.1.1Adding icon for executables on windows. Added SetIcon method to
Freezer. Winexeutil uses win32api so pywin32 must be installed to
use.unconditionally copy console.exe to dist dir and ensure permissions
are usable2013-04-10         release 1.1.0bbfreeze has been split into bbfreeze-loader package and a pure
python bbfreeze module. this should allow me to make more regular
releases.add recipe for lxml.etreedon’t pollute module namespace while importingdon’t pollute the modules namespace in EXTENSION_LOADER_SOURCEmake sure we use absolute imports in EXTENSION_LOADER_SOURCEdo not pick up bbfreeze/__main__.py when freezing bbfreeze/py.pyfix ‘googlegroup subscribe’ addressfix bdist_egg procedure when setuptools is not importablefix the bdist_egg procedure when running under buildoutnormalize package names in ‘dont_copy_as_egg’only execute entry point scripts when called as __main__use a project specific name for egg-info directoriesdon’t install PyXML as egg since it won’t workadd addEntryPoint methodcopy egg-info directoriesrename bb-freeze to bbfreezerely on setuptools/distribute being installedshorten and simplify extension loaderuse absolute imports in the extension loader to load stdlib modules2012-10-23         release 1.0.2use altgraph 0.9 as 0.10 is incompatible2012-09-27         release 1.0.1update links to alternative freezersskip libresolv.so, which is a part of glibccall patchelf for anything which looks like a binary2012-02-08         release 1.0.0better test infrastructureupdate documentationremove bbfreeze.macholibfix build on ubuntu 11.10handle platform==’linux3’ case in ensureRPathmake py recipe work again.handle “pip -e” installed development eggs, that aren’t even setuptools packages2011-04-12         release 0.97.3exclude ms-win-api-* and query.dll.make py parse minimal set of options required to run py.test on the
frozen executable.link with /LARGEADDRESSAWARE on win32ensure RPATH of application loader has the right value. try to fix
it with patchelf if not.set dont_write_bytecode and no_user_site flags if they are
available.handle pip installed namespace packages2010-10-12         release 0.97.2workaround console.exe not being executable.switch to ez_setup.py from setuptools-0.6c11.make win32com work by using a temporary directory as it’s
__gen_path__.2010-08-19         release 0.97.1add missing README.rst file.2010-08-17         release 0.97.0make it compatible with latest altgraphadd recipe for geventfix build on latest ubuntu2008-09-18         release 0.96.5added distutils command ‘bdist_bbfreeze’ contributed by Hartmut
Goebelexecutables are now stripped with the ‘strip’ command. This makes a
difference in file size when using a static libpython.a.2008-8-29         release 0.96.4record previously missing dependencies for subpackage imports. This
bug only showed up when dependencies where explicitly removed.2008-8-18         release 0.96.3fix issues with some packages, which where wrongly
recognized as development eggs2008-8-5          release 0.96.2a slightly patched getpath.c from python trunk has been
added. This should fix sys.getfilesystemencoding() for statically
linked python. We also try to link with the static library in case
the shared one has been linked with -Bsymbolic (which makes it
impossible to override the necessary symbols). This happens e.g. on
Ubuntu 8.04.__file__ in the main program now has a .py suffix. This prevents
garbage output from the warnings module.some recipes have been added (mostly breaking some unneeded
dependencies).explicit recipes for the email module have been added. the email
module isn’t added as a whole.the setup script now reports the configuration used.bbfreeze now tracks dependencies from eggs (i.e. dependencies
specified in the egg’s setup.py script).2008-3-14         release 0.96.1fix bug in an internal function, which determines if eggs should
be used. It always returned False, so eggs where never packaged.2008-3-13         release 0.96.0some egg packages have the site-packages directory as their
location, which resulted in the whole site-packages directory being
copied as some egg file.fix issue with wxPythonadd recipe for mercurialhandle development eggs (“python setup.py develop”) by running
setup.py bdist_egghandle easy install entry scriptsadd recipe for kinterbasdb (thanks to Werner F. Bruhin)fix LD_RUN_PATH issue, when –enable–new-dtags is the default for
linking (e.g. on gentoo). (thanks to Collin Day)2007-12-6         release 0.95.4workaround for virtualenvshow execution time in py2007-10-16        release 0.95.3recipes for pythoncom/pywintypes have been addedmake sys.getfilesystemencoding() work like in non-frozen versionsautomatic pathname rewritingmake stdin, stdout and stderr unbuffered in frozen programs2007-7-12       release 0.95.2fix issues with c modules with suffix ‘module.so’,
e.g. zlibmodule.so, timemodule.so, … (fedora core 7 uses that
naming scheme; thanks to Neil Becker for reporting)
The frozen executable did bail out with zipimport.ZipImportError:
can’t decompress data; zlib not available”.2007-7-11       release 0.95.1compile .py files from eggs when there is no accompanying .pyc fileskip egg/zip files in find_all_packages (makes some recipes work)2007-7-6       release 0.95.0support for egg files: bbfreeze scans zipped egg files and now
includes whole egg files/directories in the distribution. Programs
using setuptools’ pkg_resources module will now work (thanks to
Eirik Svendsen for testing this).2007-6-28      release 0.94.1fix bug in setup script, now the patched modulegraph is really usedbetter recipe handling2007-6-22      release 0.94.0support relative imports (backported from modulefinder, bbfreeze now
ships with its’ own patched copy of modulegraph).fix xml/_xmlplus issuesadd recipe for cElementTree2007-5-31      release 0.93.2include tcl/tk runtime files (really makes Tkinter work)exclude gtk, pango and friends (i.e. they must be installed on
the target system)2007-5-14      release 0.93.1make py executable work when readline is not installedfix dll search path issue (makes Tkinter work)2007-5-3       release 0.93.0dependency on libpython.so should now always be recognizedsupport for namespace packagesbasic support for zipfiles/eggs (bbfreeze will scan zipfiles/eggs
for dependencies and will implement a dummy pkg_resources.require in
frozen executables). Note that the remaining pkg_resources
functionality just isn’t available.documentation updates2007-4-27       release 0.92.0better binary dependency cache handlingfix recipe for time module on windowsuse pefile module on windows for binary dependency trackingadd gui_only flag to addScript method (which builds GUI programs
on windows, i.e. without console)strip shared libraries on non windows platformsadd showxref methodworking recipe for py.magic.greenlet2007-4-24       Initial release 0.91.0LICENSEbbfreeze contains a modified copy of modulegraph, which is distributed
under the MIT license and is copyrighted by Bob Ippolito.bbfreeze contains a modified copy of getpath.c from the python
distribution, which is distributed under the python software
foundation license version 2 and copyrighted by the python software
foundation.bbfreeze includes a module ‘bdist_bbfreeze.py’ which isCopyright 2008-2012 by Hartmut Goebel <h.goebel@goebel-consult.de>The ‘bdist_bbfreeze’ module may be distributed under the same licence
as bbfreeze itself.The remaining part is distributed under the zlib/libpng license:Copyright (c) 2007-2012 brainbot technologies AGThis software is provided ‘as-is’, without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.This notice may not be removed or altered from any source
distribution.