Change Log

eGenix mx Base Distribution Change Log

The change log includes a detailed description of all changes to this package in the recent releases.
Version: 3.2.8

Note that this change log usually only lists changes to the distribution, not all the changes of the included subpackages. Please refer to the sub-package documentation for more detailed information.

Changes from 3.2.7 to 3.2.8

Installation Enhancements:

  • Added web installer support to mxSetup, the distutils extension module which drives all our product installations.
  • Uploaded web installer package to PyPI which simplifies installation.

    In addition to the usual ways of installing eGenix mx Base, we have uploaded a web installer to PyPI, so that it is now also possible to use one of these installation methods on all supported platforms (Windows, Linux, FreeBSD, Mac OS X):
    • easy_install egenix-mx-base via PyPI
    • pip install egenix-mx-base via PyPI
    • egenix-mx-base egg reference in zc.buildout via PyPI
    • running "python install" in the unzipped web installer archive directory

    The web installer will automatically detect the platform and choose the right binary download package for you. All downloads are verified before installation.


  • mxDateTime: Protected delta.strftime() against segfaults on Windows, which only allows day values <= 31 and segfaults for higher values. Thanks to Frank Boje for reporting this problem.
  • mxTextTools: Fixed a double decref in the tagging engine that surfaced when using custom tag objects and appending the results to them. Thanks to Richard Moseley for the report.

Compatibility Enhancements

  • Prepared eGenix mx Base for two digit Python patch level numbers such as Python 2.7.10

Changes from 3.2.6 to 3.2.7


  • mxBeeBase: Fixed a problem with using larger BeeDict keysizes on 64-bit platforms. These now work for keysizes between 25 and 659 characters as well. Also extended the possible keysizes for 32-bit platform to 670 characters. Thanks to Andrey Rzhetsky for pointing us to the problem.
  • mx.Misc.FileLock: Fixed a typo in a FileLock class name.

Changes from 3.2.5 to 3.2.6


  • mxURL: Added a work-around to resolve a segfault when exiting the Python 2.7.4 interpreter. This is a Python bug which was introduced in Python 2.7.4 and will get fixed again in Python 2.7.5 - see

Documentation Enhancements

  • mxURL: Added sections on URL join operations and interaction with strings to mxURL documentation.
  • mxDateTime: Added notice to documentation that .gmtoffset() can give wrong results during DST switching time. 

Compatibility Enhancements

  • Filled the tp_methods slot of all extension types to improve Python 2.7 compatibility.

Distribution Enhancements

  • Added download URL registered with PyPI is now a static page and includes an MD5 hash tag to allow verification of the page.
  • All distribution files are GPG signed with our release key. We also provide MD5 and SHA1 hash values for all files to easily verify the downloads.

Changes from 3.2.4 to 3.2.5

  • Fixed a compatibility problem with Python 2.7.3 on Mac OS X 10.6 and later: Removed mx_customize_compiler() in favor of the standard distutils customize_compiler(). It now installs fine again with pip on more recent Mac OS X versions. Thanks to Leonardo Santagada for bringing this problem to our attention.
  • mxDateTime: Fixed a possible segfault in mxDateTime that was caused by the lazy datetime module import mechanism not catching all cases where the C API was used in mxDateTime. Thanks to Joel Rosdahl for bringing this to our attention.
  • Fixed a bug in the mx.Misc.CSV.Reader.objects() method, which triggered a TypeError.

Changes from 3.2.3 to 3.2.4

  • Fixed a compatibility problem with Python 2.7's distutils that was introduced in Python 2.7.3
  • mxDateTime: Fixed a possible double deallocation in the mxDateTime C API import helper. Thanks to Daniele Varrazzo for reporting this.

Changes from 3.2.2 to 3.2.3

  • mxDateTime: Fixed a possible segfault when using the .pydate(), .pydatetime() and .pytime() methods. Thanks to Daniel Szoska for reporting this.

Changes from 3.2.1 to 3.2.2

  • mxDateTime seconds rounding is now more careful to not show 60.00 or 61.00 as second value.
  • mxDateTime will now correctly work with numeric arrays (numpy) again. Thanks to Christian Marquardt for reporting the problem.
  • mxDateTime's DateTimeFromAbsDateTime() now accepts leap second values (86400.0 - <86401.0) as well. Thanks to Christian Marquardt for reporting the problem.
  • mxDateTime range errors did not always format the wrong value.
  • Made mxDateTime compile again on Python 2.1 and 2.2.
  • Added parameter to allow None values on most mx.Misc.ConfigFile Entry() fields.
  • mx.Misc.ConfigFile provides a new method .read_defaults() to set all values to defaults.
  • Fixed mx.Misc.ConfigFile.SafeEvalEntry() to actually work.

Changes from 3.2.0 to 3.2.1

  • Fixed a segfault in mxDateTime.
  • Fixed a possible buffer overflow in the mxDebugPrintf() function of all mx Base extensions.
  • Fixed a problem in mxSetup mx_autoconf: Python.h was not found by some tests

Changes from 3.1.3 to 3.2.0

  • Added support for Python 2.7.
  • Added native Window x64 support.
  • Included many news features in mxDateTime.
  • Fixed a few typos in the code and made the use of mxTools builtins explicit in the subpackages.
  • Added new mx.Misc.Daemon module which provides abstractions to implement Unix daemon processes.
  • Replaced all uses of string module functions with string methods... this was long overdue and should result in a small speedup across all packages.
  • eGenix mx Base Extensions now use PyObject_MALLOC() for memory allocation which should make memory allocation a little faster in a few places.
  • Documentation files are no longer duplicated in mx/Doc/. They now only appear in the resp. Doc/ subdir of the packages.
  • Prebuilt archives now also work with snapshots that use the date in the version.
  • mxSetup now cooperates with easy_install (again) and disables its own bdist_egg implementation if setuptools is found to be loaded. Thanks to Tim Cook for reporting the problem.
  • Dropped support for Python 2.3.
  • Added pip support to egenix-mx-base.
  • Added support for detecting version and platform mismatches in prebuilt archives.
  • Starting with Python 2.5, we no longer support bdist_rpm in mxSetup.
  • Starting with Python 2.6, we no longer support bdist_wininst in mxSetup.
  • mxLog no longer unfolds Unicode strings when logging stacks or tracebacks.

Changes from 3.1.2 to 3.1.3

  • Fixed a problem with mxBeeBase on BSD-based platforms such as FreeBSD and Mac OS X: file system synchronization problems between read and writes could cause data corruption. Thanks to Ernesto Picardi for bringing this to our attention.
  • Updated mxSetup to our latest version with platform mismatch detection for prebuilt archives.

Changes from 3.1.1 to 3.1.2

  • Changed the way pre-built state is restored during installation to handle situations where the distutils platform string is different between the build platform and the installation platform (e.g. for Mac OS X fat builds).

Changes from 3.1.0 to 3.1.1

  • Fixed a problem with the pre-built packages not installing on Mac OS X and older Linux distributions.
  • Verified and tested all packages with Python 2.6.

Changes from 3.0.0 to 3.1.0

  • mxSetup bdist_wininst will now always include the Python version number if you build pure Python distributions that don't include the Python source
  • mxSetup clean command will now also remove the build pickle used for e.g. bdist_prebuilt.
  • mxSetup bdist_prebuilt will now create platform independent archives for packages that don't include any C extensions.
  • mxSetup prebuilt archives no longer need to use "... build --skip ..." to skip the build process. The build command is now smart enough to detect, check and automatically use a build pickle and the prebuilt format.
  • Added setuptools support, ie. mxSetup can run with an installed setuptools to e.g. create eggs. Running python --use-setuptools bdist_egg will create an .egg file in the dist/ directory. If you want to convert a prebuilt archive to an egg, run the command with bdist_egg --skip-build.
  • Fixed a problem in mxSetup that caused the uninstall command not to work with prebuilt packages. Thanks to Wouter van Atteveldt for pointing out the problem.
  • Added new mx.Misc.CSV module for reading and writing CSV files.

Changes from 2.0.5 to 3.0.0

  • Fixed the distutils setup to now allow defining compiler options on the command line using 'python mx_autoconf -DENABLE_FEATURE install'.
  • Lots of changes in the various sub-packages. See the sub-package documentation for a full list of new features.
  • Added source code encoding markers to those files that need it.
  • Moved mxURL and mxUID from the Experimental Distribution to the Base Distribution.
  • Added better support for Python DEBUG builds. The total reference counting should now also work in case object constructors raise exceptions.
  • Added Python 2.4 and 2.5 support.

Changes from 2.0.4 to 2.0.5

  • Added Python 2.3 support.

Changes from 2.0.3 to 2.0.4

  • RPMs now install to /usr/ instead of /usr/local/. This change was necessary to resynch to the standard Python RPMs.
  • The mx distutils build system was updated to the latest version.

Changes from 2.0.2 to 2.0.3

  • Some cleanup of assignments to __debug__ which cause warnings in Python 2.1.
  • Added some missing header files. These are needed by third party tools in case they rely on the provided C interfaces.
  • Changed the error class object fullnames to properly include the complete package path.
  • Corrected a bug in the free list management of the various types which showed up when using pymalloc.
  • Prepared the tools for Python 2.2.

Changes from 2.0.1 to 2.0.2

  • Added compiler support for Cygwin. Thanks to Mark Hadfield for pointing out the necessary changes.
  • Reworked the RPM packaging for different Python versions: you can now install the RPMs for different Python versions side-by-side.
  • Updated a few packages, e.g. the mxDateTime package.

Changes from 2.0.0 to 2.0.1

  • Added back .h header files to the mx-subdirectories. Third-party software was relying on these files, but the distutils process did not include them per default.
  • New release for Python 2.1.