ActivePython Changelog

What's new in ActivePython 3.4.1.0

Jul 21, 2015
  • New Features & Upgrades:
  • Python 3.4.1
  • OpenSSL 1.0.1i
  • Tcl/Tk 8.6 on Windows builds
  • PyPM 1.4.3:
  • Suppress progress bar animation if redirecting to file (applib)
  • Upgrade to setuptools-5.2
  • Upgrade to six-1.7.2 (release notes)
  • Updated supported platform/versions: - Added version 3.4
  • Updated appdirs to 1.4.0dev
  • ActivePython 2.5 does not include documentation (Bug #90508)

New in ActivePython 3.3.2.0 (Feb 11, 2014)

  • New Features & Upgrades:
  • First release of ActivePython 3.3, based on Python 3.3.2
  • PyPM 1.4.0
  • PyWin32 b218.3 (24 Mar, 2013)

New in ActivePython 3.2.2.3 (Dec 6, 2011)

  • Upgrade to Python 3.2.2 (release notes)
  • [Windows] Security upgrade to openssl-1.0.0e
  • Upgraded the following packages:
  • Distribute-0.6.21
  • virtualenv-1.6.4

New in ActivePython 3.2.0.0 (Jul 7, 2011)

  • New Features & Upgrades:
  • PyPM (beta) for Python 3.2
  • Distribute (setuptools)
  • [Windows] Upgrade to PyWin32 CVS snapshot as of 2011-01-16
  • [MacOSX] readline support via Apple's libedit library
  • OpenSSL 1.0.0d
  • [Windows] Fix a tarfile performance issue (issue11224)

New in ActivePython 3.1.2.3 (Mar 26, 2010)

  • New Features & Upgrades:
  • Upgrade to Python 3.1.2 (release notes)
  • Upgrade to Tcl/Tk 8.5.8
  • [Windows] Support for OpenSSL in 64-bit (#22)
  • [Windows] PyWin32 included in Py3k builds (CVS 2009-11-10)
  • Security upgrade to openssl-0.9.8l
  • "Dive Into Python 3" book is now included in the documentation
  • Noteworthy Changes & Bug Fixes:
  • [Windows] Allow side-by-side installation of 32-bit and 64-bit builds (#11)
  • [Windows] Enable ctypes extension on Win64 (#12)
  • Fix the MacOSX build to use Tcl/Tk 8.5.x (bug 84679)
  • [Windows] Add registry entries to the correct location on 64-bit (bug 84403)
  • [Windows] Fix broken IDLE on the 64-bit build (#13)
  • [Windows] Include Tcl/Tk header files (#28)

New in ActivePython 3.1.1.2 (Aug 26, 2009)

  • PEP 372: Ordered Dictionaries
  • PEP 378: Format Specifier for Thousands Separator
  • Other Language Changes
  • New, Improved, and Deprecated Modules
  • IDLE
  • Build and C API Changes
  • Porting to Python 3.1

New in ActivePython 3.1.0.1 (Aug 5, 2009)

  • PEP 372: Ordered Dictionaries
  • Regular Python dictionaries iterate over key/value pairs in arbitrary order. Over the years, a number of authors have written alternative implementations that remember the order that the keys were originally inserted. Based on the experiences from those implementations, a new collections.OrderedDict class has been introduced.
  • The OrderedDict API is substantially the same as regular dictionaries but will iterate over keys and values in a guaranteed order depending on when a key was first inserted. If a new entry overwrites an existing entry, the original insertion position is left unchanged. Deleting an entry and reinserting it will move it to the end.
  • The standard library now supports use of ordered dictionaries in several modules. The configparser module uses them by default. This lets configuration files be read, modified, and then written back in their original order. The _asdict() method for collections.namedtuple() now returns an ordered dictionary with the values appearing in the same order as the underlying tuple indicies. The json module is being built-out with an object_pairs_hook to allow OrderedDicts to be built by the decoder. Support was also added for third-party tools like PyYAML.
  • PEP 378: Format Specifier for Thousands Separator:
  • The builtin format() function and the str.format() method use a mini-language that now includes a simple, non-locale aware way to format a number with a thousands separator. That provides a way to humanize a program’s output, improving its professional appearance and readability.
  • The supported types are int, float, complex and decimal.Decimal.
  • Discussions are underway about how to specify alternative separators like dots, spaces, apostrophes, or underscores. Locale-aware applications should use the existing n format specifier which already has some support for thousands separators.
  • Other Language Changes:
  • The int() type gained a bit_length method that returns the number of bits necessary to represent its argument in binary.
  • The string.maketrans() function is deprecated and is replaced by new static methods, bytes.maketrans() and bytearray.maketrans(). This change solves the confusion around which types were supported by the string module. Now, str, bytes, and bytearray each have their own maketrans and translate methods with intermediate translation tables of the appropriate type.
  • The syntax of the with statement now allows multiple context managers in a single statement.
  • round(x, n) now returns an integer if x is an integer. Previously it returned a float.
  • Python now uses David Gay’s algorithm for finding the shortest floating point representation that doesn’t change its value. This should help mitigate some of the confusion surrounding binary floating point numbers.
  • The significance is easily seen with a number like 1.1 which does not have an exact equivalent in binary floating point. Since there is no exact equivalent, an expression like float('1.1') evaluates to the nearest representable value which is 0x1.199999999999ap+0 in hex or 1.100000000000000088817841970012523233890533447265625 in decimal. That nearest value was and still is used in subsequent floating point calculations.
  • What is new is how the number gets displayed. Formerly, Python used a simple approach. The value of repr(1.1) was computed as format(1.1, '.17g') which evaluated to '1.1000000000000001'. The advantage of using 17 digits was that it relied on IEEE-754 guarantees to assure that eval(repr(1.1)) would round-trip exactly to its original value. The disadvantage is that many people found the output to be confusing (mistaking intrinsic limitations of binary floating point representation as being a problem with Python itself).
  • The new algorithm for repr(1.1) is smarter and returns '1.1'. Effectively, it searches all equivalent string representations (ones that get stored with the same underlying float value) and returns the shortest representation.
  • The new algorithm tends to emit cleaner representations when possible, but it does not change the underlying values. So, it is still the case that 1.1 + 2.2 != 3.3 even though the representations may suggest otherwise.
  • The new algorithm depends on certain features in the underlying floating point implementation. If the required features are not found, the old algorithm will continue to be used. Also, the text pickle protocols assure cross-platform portability by using the old algorithm.
  • New, Improved, and Deprecated Modules:
  • Added a collections.Counter class to support convenient counting of unique items in a sequence or iterable.
  • Added a new module, tkinter.ttk for access to the Tk themed widget set. The basic idea of ttk is to separate, to the extent possible, the code implementing a widget’s behavior from the code implementing its appearance.
  • The gzip.GzipFile and bz2.BZ2File classes now support the context manager protocol.
  • The decimal module now supports methods for creating a decimal object from a binary float.
  • The itertools module grew two new functions. The itertools.combinations_with_replacement() function is one of four for generating combinatorics including permutations and Cartesian products. The itertools.compress() function mimics its namesake from APL. Also, the existing itertools.count() function now has an optional step argument and can accept any type of counting sequence including fractions.Fraction and decimal.Decimal.
  • collections.namedtuple() now supports a keyword argument rename which lets invalid fieldnames be automatically converted to positional names in the form _0, _1, etc.
  • The re.sub(), re.subn() and re.split() functions now accept a flags parameter.
  • The logging module now implements a simple logging.NullHandler class for applications that are not using logging but are calling library code that does. Setting-up a null handler will suppress spurious warnings such as “No handlers could be found for logger foo”:
  • The runpy module which supports the -m command line switch now supports the execution of packages by looking for and executing a __main__ submodule when a package name is supplied.
  • The pdb module can now access and display source code loaded via zipimport (or any other conformant PEP 302 loader).
  • Add pydoc help topics for symbols so that help('@') works as expected in the interactive environment.
  • The unittest module now supports skipping individual tests or classes of tests. And it supports marking a test as a expected failure, a test that is known to be broken.
  • The io module has three new constants for the seek() method SEEK_SET, SEEK_CUR, and SEEK_END.
  • The nntplib and imaplib modules now support IPv6.
  • The pickle module has been adapted for better interoperability with Python 2.x when used with protocol 2 or lower. The reorganization of the standard library changed the formal reference for many objects. For example, __builtin__.set in Python 2 is called builtins.set in Python 3. This change confounded efforts to share data between different versions of Python. But now when protocol 2 or lower is selected, the pickler will automatically use the old Python 2 names for both loading and dumping. An unfortunate but unavoidable side-effect of this change is that protocol 2 pickles produced by Python 3.1 won’t be readable with Python 3.0. The latest pickle protocol, protocol 3, should be used when migrating data between Python 3.x implementations, as it doesn’t attempt to remain compatible with Python 2.x.
  • A new module, importlib was added. It provides a complete, portable, pure Python reference implementation of the import statement and its counterpart, the __import__() function. It represents a substantial step forward in documenting and defining the actions that take place during imports.
  • Optimizations:
  • The new I/O library (as defined in PEP 3116) was mostly written in Python and quickly proved to be a problematic bottleneck in Python 3.0. In Python 3.1, the I/O library has been entirely rewritten in C and is 2 to 20 times faster depending on the task at hand. The pure Python version is still available for experimentation purposes through the _pyio module.
  • Added a heuristic so that tuples and dicts containing only untrackable objects are not tracked by the garbage collector. This can reduce the size of collections and therefore the garbage collection overhead on long-running programs, depending on their particular use of datatypes.
  • Enabling a configure option named --with-computed-gotos on compilers that support it (notably: gcc, SunPro, icc), the bytecode evaluation loop is compiled with a new dispatch mechanism which gives speedups of up to 20%, depending on the system, the compiler, and the benchmark.
  • The decoding of UTF-8, UTF-16 and LATIN-1 is now two to four times faster.
  • The json module now has a C extension to substantially improve its performance. In addition, the API was modified so that json works only with str, not with bytes. That change makes the module closely match the JSON specification which is defined in terms of Unicode.
  • Pitrou and Benjamin Peterson; issue 4136.)
  • Unpickling now interns the attribute names of pickled objects. This saves memory and allows pickles to be smaller.
  • IDLE’s format menu now provides an option to strip trailing whitespace from a source file.
  • Build and C API Changes:
  • Integers are now stored internally either in base 2**15 or in base 2**30, the base being determined at build time. Previously, they were always stored in base 2**15. Using base 2**30 gives significant performance improvements on 64-bit machines, but benchmark results on 32-bit machines have been mixed. Therefore, the default is to use base 2**30 on 64-bit machines and base 2**15 on 32-bit machines; on Unix, there’s a new configure option --enable-big-digits that can be used to override this default.
  • The PyLong_AsUnsignedLongLong() function now handles a negative pylong by raising OverflowError instead of TypeError.
  • Deprecated PyNumber_Int. Use PyNumber_Long instead.
  • Added a new PyOS_string_to_double function to replace the deprecated functions PyOS_ascii_strtod and PyOS_ascii_atof.
  • Added PyCapsule as a replacement for the PyCObject API. The principal difference is that the new type has a well defined interface for passing typing safety information and a less complicated signature for calling a destructor. The old type had a problematic API and is now deprecated.
  • Porting to Python 3.1:
  • The new floating point string representations can break existing doctests.
  • The automatic name remapping in the pickle module for protocol 2 or lower can make Python 3.1 pickles unreadable in Python 3.0. One solution is to use protocol 3. Another solution is to set the fix_imports option to False. See the discussion above for more details.