1. Anthony Tuininga
  2. cx_Freeze


cx_Freeze / HISTORY.txt

Changes from 4.1.1 to 4.1.2
 1) Fix bug that caused the util extension to be named improperly.
 2) Fix bug that prevented freezing from taking place if a packaged submodule
    was missing.
 3) Fix bug that prevented freezing from taking place in Python 3.x if the
    encoding of the source file wasn't compatible with the encoding of the
    terminal performing the freeze.
 4) Fix bug that caused the base modules to be included in the library.zip as
    well as the base executables.

Changes from 4.1 to 4.1.1
 1) Added support for Python 3.1.
 2) Added support for 64-bit Windows.
 3) Ensured that setlocale() is called prior to manipulating file names so
    that names that are not encoded in ASCII can still be used.
 4) Fixed bug that caused the Python shared library to be ignored and the
    static library to be required or a symbolic link to the shared library
    created manually.
 5) Added support for renaming attributes upon import and other less
    frequently used idioms in order to avoid as much as possible spurious
    errors about modules not being found.
 6) Force inclusion of the traceback module in order to ensure that errors are
    reported in a reasonable fashion.
 7) Improved support for the execution of ldd on the Solaris platform as
    suggested by Eric Brunel.
 8) Added sample for the PyQt4 package and improved hooks for that package.
 9) Enhanced hooks further in order to perform hidden imports and avoid errors
    about missing modules for several additional commonly used packages and
10) Readded support for the zip include option.
11) Avoid the error about digest mismatch when installing RPMs by modifying
    the spec files built with cx_Freeze.
12) Ensure that manifest.txt is included in the source distribution.

Changes from 4.0.1 to 4.1
 1) Added support for Python 3.x.
 2) Added support for services on Windows.
 3) Added command line option --silent (-s) as requested by Todd Templeton.
    This option turns off all normal output including the report of the modules
    that are included.
 4) Added command line option --icon as requested by Tom Brown.
 5) Ensure that Py_Finalize() is called even when exceptions take place so that
    any finalization (such as __del__ calls) are made prior to the executable
 6) Ensured that empty directories are created as needed in the target as
    requested by Clemens Hermann.
 7) The encodings package and any other modules required to bootstrap the
    Python runtime are now automatically included in the frozen executable.
 8) Ensured that if a target name is specified, that the module name in the zip
    file is also changed. Thanks to Clemens Hermann for the initial patch.
 9) Enabled support for compiling on 64-bit Windows.
10) If an import error occurs during the load phase, treat that as a bad module
    as well. Thanks to Tony Meyer for pointing this out.
11) As suggested by Todd Templeton, ensured that the include files list is
    copied, not simply referenced so that further uses of the list do not
    inadvertently cause side effects.
12) As suggested by Todd Templeton, zip files are now closed properly in order
    to avoid potential corruption.
13) As suggested by Todd Templeton, data files are no longer copied when the
    copy dependent files flag is cleared.
14) Enabled better support of setup.py scripts that call other setup.py
    scripts such as the ones used by cx_OracleTools and cx_OracleDBATools.
15) On Solaris, ldd outputs tabs instead of spaces so expand them first before
    looking for the separator. Thanks to Eric Brunel for reporting this and
    providing the solution.
16) On Windows, exclude the Windows directory and the side-by-side installation
    directory when determining DLLs to copy since these are generally
    considered part of the system.
17) On Windows, use %* rather than the separated arguments in the generated
    batch file in order to avoid problems with the very limited argument
    processor used by the command processor.
18) For the Win32GUI base executable, add support for specifying the caption to
    use when displaying error messages.
19) For the Win32GUI base executable, add support for calling the excepthook
    for top level exceptions if one has been specified.
20) On Windows, ensure that the MSI packages that are built are per-machine
    by default as otherwise strange things can happen.
21) Fixed bug in the calling of readlink() that would occasionally result in
    strange behavior or segmentation faults.
22) Duplicate warnings about libraries not found by ldd are now suppressed.
23) Tweaked hooks for a number of modules based on feedback from others or
    personal experience.

Changes from 4.0 to 4.0.1
 1) Added support for Python 2.6. On Windows a manifest file is now required
    because of the switch to using the new Microsoft C runtime.
 2) Ensure that hooks are run for builtin modules.

Changes from 4.0b1 to 4.0
 1) Added support for copying files to the target directory.
 2) Added support for a hook that runs when a module is missing.
 3) Added support for binary path includes as well as excludes; use sequences
    rather than dictionaries as a more convenient API; exclude the standard
    locations for 32-bit and 64-bit libaries in multi-architecture systems.
 4) Added support for searching zip files (egg files) for modules.
 5) Added support for handling system exit exceptions similarly to what Python
    does itself as requested by Sylvain.
 6) Added code to wait for threads to shut down like the normal Python
    interpreter does. Thanks to Mariano Disanzo for discovering this
 7) Hooks added or modified based on feedback from many people.
 8) Don't include the version name in the display name of the MSI.
 9) Use the OS dependent path normalization routines rather than simply use the
    lowercase value as on Unix case is important; thanks to Artie Eoff for
    pointing this out.
10) Include a version attribute in the cx_Freeze package and display it in the
    output for the --version option to the script.
11) Include build instructions as requested by Norbert Sebok.
12) Add support for copying files when modules are included which require data
    files to operate properly; add support for copying the necessary files for
    the Tkinter and matplotlib modules.
13) Handle deferred imports recursively as needed; ensure that from lists do
    not automatically indicate that they are part of the module or the deferred
    import processing doesn't actually work!
14) Handle the situation where a module imports everything from a package and
    the __all__ variable has been defined but the package has not actually
    imported everything in the __all__ variable during initialization.
15) Modified license text to more closely match the Python Software Foundation
    license as was intended.
16) Added sample script for freezing an application using matplotlib.
17) Renamed freeze to cxfreeze to avoid conflict with another package that uses
    that executable as requested by Siegfried Gevatter.

Changes from 3.0.3 to 4.0b1
 1) Added support for placing modules in library.zip or in a separate zip file
    for each executable that is produced.
 2) Added support for copying binary dependent files (DLLs and shared
 3) Added support for including all submodules in a package
 4) Added support for including icons in Windows executables
 5) Added support for constants module which can be used for determining
    certain build constants at runtime
 6) Added support for relative imports available in Python 2.5 and up
 7) Added support for building Windows installers (Python 2.5 and up) and
    RPM packages
 8) Added support for distutils configuration scripts
 9) Added support for hooks which can force inclusion or exclusion of modules
    when certain modules are included
10) Added documentation and samples
11) Added setup.py for building the cx_Freeze package instead of a script
    used to build only the frozen bases
12) FreezePython renamed to a script called freeze in the Python distribution
13) On Linux and other platforms that support it set LD_RUN_PATH to include
    the directory in which the executable is located

Changes from 3.0.2 to 3.0.3
 1) In Common.c, used MAXPATHLEN defined in the Python OS independent include
    file rather than the PATH_MAX define which is OS dependent and is not
    available on IRIX as noted by Andrew Jones.
 2) In the initscript ConsoleSetLibPath.py, added lines from initscript
    Console.py that should have been there since the only difference between
    that script and this one is the automatic re-execution of the executable.
 3) Added an explicit "import encodings" to the initscripts in order to handle
    Unicode encodings a little better. Thanks to Ralf Schmitt for pointing out
    the problem and its solution.
 4) Generated a meaningful name for the extension loader script so that it is
    clear which particular extension module is being loaded when an exception
    is being raised.
 5) In MakeFrozenBases.py, use distutils to figure out a few more
    platform-dependent linker flags as suggested by Ralf Schmitt.

Changes from 3.0.1 to 3.0.2
 1) Add support for compressing the byte code in the zip files that are
 2) Add better support for the win32com package as requested by Barry Scott.
 3) Prevent deletion of target file if it happens to be identical to the
    source file.
 4) Include additional flags for local modifications to a Python build as
    suggested by Benjamin Rutt.
 5) Expanded instructions for building cx_Freeze from source based on a
    suggestion from Gregg Lind.
 6) Fix typo in help string.

Changes from 3.0 to 3.0.1
 1) Added option --default-path which is used to specify the path used when
    finding modules. This is particularly useful when performing cross
    compilations (such as for building a frozen executable for Windows CE).
 2) Added option --shared-lib-name which can be used to specify the name of
    the shared library (DLL) implementing the Python runtime that is required
    for the frozen executable to work. This option is also particularly useful
    when cross compiling since the normal method for determining this
    information cannot be used.
 3) Added option --zip-include which allows for additional files to be added
    to the zip file that contains the modules that implement the Python
    script. Thanks to Barray Warsaw for providing the initial patch.
 4) Added support for handling read-only files properly. Thanks to Peter
    Grayson for pointing out the problem and providing a solution.
 5) Added support for a frozen executable to be a symbolic link. Thanks to
    Robert Kiendl for providing the initial patch.
 6) Enhanced the support for running a frozen executable that uses an existing
    Python installation to locate modules it requires. This is primarily of
    use for embedding Python where the interface is C but the ability to run
    from source is still desired.
 7) Modified the documentation to indicate that building from source on
    Windows currently requires the mingw compiler (http://www.mingw.org).
 8) Workaround the problem in Python 2.3 (fixed in Python 2.4) which causes a
    broken module to be left in sys.modules if an ImportError takes place
    during the execution of the code in that module. Thanks to Roger Binns
    for pointing this out.

Changes from 3.0 beta3 to 3.0
 1) Ensure that ldd is only run on extension modules.
 2) Allow for using a compiler other than gcc for building the frozen base
    executables by setting the environment variable CC.
 3) Ensure that the import lock is not held while executing the main script;
    otherwise, attempts to import a module within a thread will hang that
    thread as noted by Roger Binns.
 4) Added support for replacing the paths in all frozen modules with something
    else (so that for example the path of the machine on which the freezing
    was done is not displayed in tracebacks)

Changes from 3.0 beta2 to 3.0 beta3
 1) Explicitly include the warnings module so that at runtime warnings are
    suppressed as when running Python normally.
 2) Improve the extension loader so that an ImportError is raised when the
    dynamic module is not located; otherwise an error about missing attributes
    is raised instead.
 3) Extension loaders are only created when copying dependencies since the
    normal module should be loadable in the situation where a Python
    installation is available.
 4) Added support for Python 2.4.
 5) Fixed the dependency checking for wxPython to be a little more

Changes from 3.0 beta1 to 3.0 beta2
 1) Fix issues with locating the initscripts and bases relative to the
    directory in which the executable was started.
 2) Added new base executable ConsoleKeepPath which is used when an existing
    Python installation is required (such as for FreezePython itself).
 3) Forced the existence of a Python installation to be ignored when using the
    standard Console base executable.
 4) Remove the existing file when copying dependent files; otherwise, an error
    is raised when attempting to overwrite read-only files.
 5) Added option -O (or -OO) to FreezePython to set the optimization used when
    generating bytecode.

Changes from 2.2 to 3.0 beta1
 1) cx_Freeze now requires Python 2.3 or higher since it takes advantage of
    the ability of Python 2.3 and higher to import modules from zip files.
    This makes the freezing process considerably simpler and also allows for
    the execution of multiple frozen packages (such as found in COM servers or
    shared libraries) without requiring modification to the Python modules.
 2) All external dependencies have been removed. cx_Freeze now only requires
    a standard Python distribution to do its work.
 3) Added the ability to define the initialization scripts that cx_Freeze uses
    on startup of the frozen program. Previously, these scripts were written
    in C and could not easily be changed; now they are written in Python and
    can be found in the initscripts directory (and chosen with the
    new --init-script option to FreezePython).
 4) The base executable ConsoleSetLibPath has been removed and replaced with
    the initscript ConsoleSetLibPath.
 5) Removed base executables for Win32 services and Win32 COM servers. This
    functionality will be restored in the future but it is not currently in a
    state that is ready for release. If this functionality is required, please
    use py2exe or contact me for my work in progress.
 6) The attribute sys.frozen is now set so that more recent pywin32 modules
    work as expected when frozen.
 7) Added option --include-path to FreezePython to allow overriding of
    sys.path without modifying the environment variable PYTHONPATH.
 8) Added option --target-dir/--install-dir to specify the directory in which
    the frozen executable and its dependencies will be placed.
 9) Removed the option --shared-lib since it was used for building shared
    libraries and can be managed with the initscript SharedLib.py.
10) MakeFrozenBases.py now checks the platform specific include directory as
    requested by Michael Partridge.

Changes from 2.1 to 2.2
 1) Add option (--ext-list-file) to FreezePython to write the list of
    extensions copied to the installation directory to a file. This option is
    useful in cases where multiple builds are performed into the same
    installation directory.
 2) Pass the arguments on the command line through to Win32 GUI applications.
    Thanks to Michael Porter for pointing this out.
 3) Link directly against the python DLL when building the frozen bases on
    Windows, thus eliminating the need for building an import library.
 4) Force sys.path to include the directory in which the script to be frozen
    is found.
 5) Make sure that the installation directory exists before attempting to
    copy the target binary into it.
 6) The Win32GUI base has been modified to display fatal errors in message
    boxes, rather than printing errors to stderr, since on Windows the
    standard file IO handles are all closed.

Changes from 2.0 to 2.1
 1) Remove dependency on Python 2.2. Thanks to Paul Moore for not only
    pointing it out but providing patches.
 2) Set up the list of frozen modules in advance, rather than doing it after
    Python is initialized so that implicit imports done by Python can be
    satisfied. The bug in Python 2.3 that demonstrated this issue has been
    fixed in the first release candidate. Thanks to Thomas Heller for pointing
    out the obvious in this instance!
 3) Added additional base executable (ConsoleSetLibPath) to support setting
    the LD_LIBRARY_PATH variable on Unix platforms and restarting the
    executable to put the new setting into effect. This is primarily of use
    in distributing wxPython applications on Unix where the shared library
    has an embedded RPATH value which can cause problems.
 4) Small improvements of documentation based on feedback from several people.
 5) Print information about the files written or copied during the freezing
 6) Do not copy extensions when freezing if the path is being overridden since
    it is expected that a full Python installation is available to the target
    users of the frozen binary.
 7) Provide meaningful error message when the wxPython library cannot be
    found during the freezing process.

Changes from 1.1 to 2.0
 1) Added support for in process (DLL) COM servers using PythonCOM.
 2) Ensured that the frozen flag is set prior to determining the full path for
    the program in order to avoid warnings about Python not being found on
    some platforms.
 3) Added include file and resource file to the source tree to avoid the
    dependency on the Wine message compiler for Win32 builds.
 4) Dropped the option --copy-extensions; this now happens automatically since
    the resulting binary is useless without them.
 5) Added a sample for building a Win32 service.
 6) Make use of improved modules from Python 2.3 (which function under 2.2)

Changes from 1.0 to 1.1
 1) Fixed import error with C extensions in packages; thanks to Thomas Heller
    for pointing out the solution to this problem.
 2) Added options to FreezePython to allow for the inclusion of modules which
    will not be found by the module finder (--include-modules) and the
    exclusion of modules which will be found by the module finder but should
    not be included (--exclude-modules).
 3) Fixed typo in README.txt.