r53204 - peps/trunk/pep-0000.txt peps/trunk/pep-3108.txt

Author: brett.cannon Date: Tue Jan 2 01:02:41 2007 New Revision: 53204 Added: peps/trunk/pep-3108.txt (contents, props changed) Modified: peps/trunk/pep-0000.txt Log: Add PEP 3108: Standard Library Reorganization. Modified: peps/trunk/pep-0000.txt ============================================================================== --- peps/trunk/pep-0000.txt (original) +++ peps/trunk/pep-0000.txt Tue Jan 2 01:02:41 2007 @@ -106,6 +106,7 @@ S 3105 Make print a function Brandl S 3106 Revamping dict.keys(), .values() and .items() GvR S 3107 Function Annotations Winter, Lownds + I 3108 Standard Library Reorganization Cannon Finished PEPs (done, implemented in Subversion) @@ -445,6 +446,7 @@ S 3105 Make print a function Brandl S 3106 Revamping dict.keys(), .values() and .items() GvR S 3107 Function Annotations Winter, Lownds + I 3108 Standard Library Reorganization Cannon Key Added: peps/trunk/pep-3108.txt ============================================================================== --- (empty file) +++ peps/trunk/pep-3108.txt Tue Jan 2 01:02:41 2007 @@ -0,0 +1,597 @@ +PEP: 3108 +Title: Standard Library Reorganization +Version: $Revision$ +Last-Modified: $Date$ +Author: David Goodger <goodger@users.sourceforge.net>, +Status: Draft +Type: Informational +Python-Version: 3.0 +Content-Type: text/x-rst +Created: 01-Jan-2007 +Post-History: + + +Abstract +======== + +Just like the language itself, Python's standard library (stdlib) has +grown over the years to be very rich. But over time some modules +have lost their need to be included with Python. There has also been +an introduction of a naming convention for modules since Python's +inception that not all modules follow. + +With Python 3.0 a chance to remove modules that do not have long term +usefulness has presented itself. This chance also allows for the +renaming of modules so that they follow the Python style guide +[#pep-0008]_. This PEP lists modules that should not be included in +Python 3.0 and what modules need to be renamed. + + +Modules to Remove +================= + +Guido pronounced that "silly old stuff" is to be deleted from the +stdlib for Py3K [#silly-old-stuff]_. This is open-ended on purpose. +Each module to be removed needs to have a justification as to why it +should no longer be distributed with Python. This can range from the +module being deprecated in Python 2.x to being for a platform that is +no longer widely used. + +This section of the PEP lists the various modules to be removed. Each +subsection represents a different reason for modules to be +removed. Each module must have a specific justification on top of +being listed in a specific subsection so as to make sure only modules +that truly deserve to be removed are in fact removed. + +When a reason mentions how long it has been since a module has been +"uniquely edited", it is in reference to how long it has been since a +checkin was done specifically for the module and not for a change that +applied universally across the entire stdlib. If an edit time is not +denoted as "unique" then it is the last time the file was edited, +period. + + +Previously deprecated +--------------------- + +Modules in this section have been deprecated at some point in the +Python 2.x release series but are currently still distributed with +Python. Deprecation information is gathered either from PEP 4 or the +Global Module Index [#pep-0004]_, [#module-index]_. Each module is +listed with the Python version that the deprecation started in. + +* buildtools + 2.3 +* cfmfile + 2.4 +* gopherlib + 2.5 +* macfs + 2.3 +* md5 + 2.5 +* mimetools + 2.3 +* MimeWriter + 2.3 +* mimefy + 2.3 +* multifile + 2.3 +* posixfile + 1.5 +* rfc822 + 2.3 +* rgbimg + 2.5 +* sha + 2.5 + + +Platform-specific with minimal use +---------------------------------- + +Python supports many platforms, some of which are not widely held. +And on some of these platforms there are modules that have limited use +to people on those platforms. Because of their limited usefulness it +would be better to no longer burden the Python development team with +their maintenance. + +* IRIX (which is no longer produced [#irix-retirement]_) + + AL/al + - Provides sound support on Indy and Indigo workstations. + * Both workstations are no longer available. + - Code has not been uniquely edited in three years. + + cd + - CD drive control for SGI systems. + * SGI no longer sells machines with IRIX on them. + - Code has not been uniquely edited in 14 years. + + DEVICE/GL/gl/cgen/cgensuport + - OpenGL access. + - Has not been edited in at least eight years. + - Third-party libraries provide better support. + * PyOpenGL [#pyopengl]_ + + FL/fl/flp + - Wrapper for the FORMS library [#irix-forms]_ + * FORMS has not been edited in 12 years. + - Library is not widely used. + * First eight hits on Google are for Python docs for fl. + + fm + - Wrapper to the IRIS Font Manager library. + * Only available on SGI machines which no longer come with + IRIX. + + imgfile + - Wrapper for SGI libimage library for imglib image files + (``.rgb`` files). + - Python Imaging Library provdes read-only support [#pil]_. + - Not uniquely edited in 13 years. + + jpeg + - Wrapper for JPEG (de)compressor. + - Code not uniquely edited in nine years. + - Third-party libraries provide better support. + * Python Imaging Library [#pil]_ + + sv + - Wrapper for Indigo video card. + * Harware is no longer manufactured. + - Undocumented. + - Code not uniquely edited in 13 years. +* Solaris + + SUNAUDIODEV/sunaudiodev + - Access to the sound card on Sun machines. + - Code not uniquely edited in over eight years. +* Mac + + applesingle + - Undocumented. + * AppleSingle is a binary file format for A/UX. + + A/UX no longer distributed. +* UNIX + + nis + - Wrapper for NIS. + * NIS has been replaced by LDAP, DNS, and Kerberos. + + +Minimal usage +------------- + +Some modules that are platform-independent have minimal usage. This +can be from how easy it is to implement the functionality from scratch +or because the audience for the code is small. + +* audiodev + + Undocumented. + + Not edited in five years. + + If removed sunaudio should go as well. + - Undocumented. + - Not edited in over seven years. +* fileinput + + Basic functionality handled by ``itertools.chain``. + + Using ``enumerate`` (for the line number in the file), + ``itertools.repeat`` (for returning the filename with each + line), and ``zip`` (for connecting the ``enumerate`` object and + ``itertools.repeat`` object) provides 95% of other unique + abilities of fileinput. +* imputil + + Undocumented. + + Never updated to support absolute imports. +* mutex + + Easy to implement using a semaphore and a queue. + + Cannot block on a lock attempt. + + Not uniquely edited since its addition 15 years ago. +* repr + + Controls output of the repr of objects. + - String slicing and string interpolation can do similar work. + + Used by pdb, but do not need to expose API. +* symtable/_symtable + + Undocumented. +* telnetlib + + Telnet is not used very much anymore. + - Telnet is unsafe. + - Most people use SSH instead. +* toaiff + + Undocumented. + + Requires ``sox`` library to be installed on the system. +* user + + Easily handled by allowing the application specify its own + module name, check for existence, and import if found. +* new + + Just a rebinding of names from the 'types' module. + + Can also call ``type`` built-in to get most types easily. +* pure + + Written before Pure Atria was bought by Rational which was then + bought by IBM (in other words, very old). + +Obsolete +-------- + +Becoming obsolete signifies that either another module in the stdlib +or a widely distributed third-party library provides a better solution +for what the module is meant for. + +* base64/quopri/uu + + Support exists in the codecs module. + + If removed (along with binhex), also remove binascii. + - C implementation of base64, binhex, and uu modules. +* asynchat/asyncore + + Third-party libraries provide better solutions. + - twisted [#twisted]_ + + Deprecation previously supported [#py-dev-summary-2004-11-01]_ +* Bastion/rexec + + Restricted execution / security. + + Turned off in Python 2.3. + + Modules deemed unsafe. +* dl + + ctypes provides better support for same functionality. +* fpformat + + All functionality is supported by string interpolation. +* getopt + + optparse provides better functionality. +* ihooks + + Documented except for saying that module might be obsolete. + + For use with rexec which has been turned off since Python 2.3. +* imageop + + Better support by third-party libraries. + - Python Imaging Library [#pil]_. +* linuxaudiodev + + Replaced by ossaudiodev. +* stat + + ``os.stat`` now returns a tuple with attributes. +* statvfs + + ``os.statvfs`` now returns a tuple with attributes. +* strop + + Implements functions used by 'string' module that have now + become methods on the str type. +* thread + + People should use 'threading' instead. + - Rename 'thread' to _thread. + - Deprecate dummy_thread. + * Rename to _mockthread. + * Change of name better reflects modules purpose. + + Guido has previously supported the deprecation + [#thread-deprecation]_. +* timing + + Use timeit or time. + + Documentation says the module is obsolete [#timing-module]_. + + +Modules to Rename +================= + +Along with the stdlib gaining some modules that are no longer +relevant, there is also the issue of naming. Many modules existed in +the stdlib before PEP 8 came into existence [#pep-0008]_. This has +led to some naming inconsistencies that should be addressed. + +Any module that has been suggested for removal and does not meet the +required naming scheme is *not* listed below. + + +PEP 8 violations +---------------- + +PEP 8 specifies that modules "should have short, lowercase names, +without underscores" [#pep-0008]_. There is no mention, though, if +this rule extends to modules contained within a package. The +assumption is that underscores are acceptable in module names when +they are contained within a package but that any uppercase letters is +not. + +* _winreg + winreg (rename also because module has a public interface). +* autoGIL + autogil +* BaseHTTPServer + basehttpserver +* Carbon + carbon +* CGIHTTPServer + cgihttpserver +* ColorPicker + colorpicker +* ConfigParser + configparser +* Cookie + cookie +* copy_reg + copyreg +* cProfile +* DocXMLRPCServer + docxmlrpcserver +* dummy_threading + mockthreading (rename because "mock" makes more sense than + "dummy" and rename already required). +* EasyDialogs + easydialogs +* FrameWork + framework +* HTMLParser + htmlparser +* MacOS + macos +* MiniAEFrame + miniaeframe +* Nav + nav +* PixMapWrapper + pixmapwrapper +* py_compile + pycompile +* Queue + queue +* repr + reprlib (rename because module name shadows a built-in). +* ScrolledText + scrolledtext +* SimpleHTTPServer + simplehttpserver +* SimpleXMLRPCServer + simplexmlrpcserver +* SocketServer + socketserver +* StringIO + stringio +* Tix + tix +* Tkinter + tkinter +* UserDict + userdict +* UserList + userlist +* UserString + userstring +* W + w + + +Merging C and Python implementations of the same interface +---------------------------------------------------------- + +Several interfaces have both a Python and C implementation. While it +is great to have a C implementation for speed with a Python +implementation as fallback, there is no need to expose the two +implementations independently in the stdlib. For Python 3.0 all +interfaces with two implementations will be merged into a single +public interface. + +The C module is to be given a leading underscore to delineate the fact +that it is not the reference implementation (the Python implementation +is). This means that any semantic difference between the C and Python +versions must be dealt with before Python 3.0 or else the C +implementation will be removed until it can be fixed. + +One interface that is not listed below is xml.etree.ElementTree. This +is an externally maintained module and thus is not under the direct +control of the Python development team for renaming. See `Open +Issues`_ for a discussion on this. + +* pickle/cPickle + + Rename cPickle to _pickle. + + Semantic completeness of C implementation *not* verified. +* profile/cProfile + + Rename cProfile to profile. + + Semantic completeness of C implementation *not* verified. +* StringIO/cStringIO + + Rename StringIO to stringio. + + Rename cStringIO to _stringio. + + Semantic completeness of C implementation *not* verified. + + +No public, documented interface +------------------------------- + +There are several modules in the stdlib that have no defined public +interface. These modules exist as support code for other modules that +are exposed. Because they are not meant to be used directly they +should be renamed to reflect this fact. + +* bdb + _bdb +* markupbase + _markupbase +* opcode + _opcode +* dummythread + _mockthread (assuming the deprecation of 'thread' occurs). + + +Transition Plan +=============== + +For modules to be removed +------------------------- + +A PendingDeprecationWarning will be set in Python 2.6 for all modules +slated to be removed in Python 3.0. This will allow people to know +which modules will not exist but without being overly noisy since +PendingDeprecationWarning is by default silenced. + + +For modules to be renamed +------------------------- + +Modules will be renamed in Python 2.6 . The original names of the +modules will still work but will raise ImportWarning upon import. The +refactoring tool for transitioning to Python 3.0 will refactor imports +that use the original names to the new names. + + +Open Issues +=========== + +Consolidate dependent modules together into a single module or package? +----------------------------------------------------------------------- + +The stdlib has several modules that have a level of dependency between +them (e.g., urllib and urllib2). Usually one is a low-level module +that provides basic abilities with a corresponding higher-level API is +given in another module for simple use-cases. In Python 3.0 we could +group these dependent modules together into a single module or package +to better reflect their relationship. + +Keep in mind when looking at the groupings that deprecation or removal +is also a possibility if there is enough overlap or a module is +obsolete. + +* Cookie/cookielib +* urllib/urllib2 + + urlparse? + + httplib? +* cgi/cgitb +* Tix/Tkinter +* getpass/pwd/spwd/grp +* mailbox/mhlib +* anydbm/whichdbm +* bsddb/dbhash +* pickle/pickletools +* HTMLParser/htmllib +* ftplib/netrc +* parser/symbol + + +Consolidate certain modules with similar themes together in a package? +---------------------------------------------------------------------- + +Packages are often used to group together modules that have a similar +theme but do not have any direct relationship or dependency upon each +other. For Python 3.0 obvious groupings could be done since renaming +of various modules is already occurring. + +* collections + + heapq + + Queue + + sets + + UserDist + + UserList + + What to do with UserString? + - Have a package for Python implementations of built-in types + instead of putting the User* modules into 'collections'? +* mac + + Various Mac-specific modules. + + Same can be done for other platform-specific code. +* Profiling + + cProfile + + profile + + hotshot + + pstats +* email + + mailbox + + mhlib +* Databases + + anydbm + + dbhash + + dbm + + bsddb + + dumbdbm + + gdbm + + whichdb +* Audio + + aifc + + audioop + + chunk + + ossaudiodev + + sunau + + wave + + winsound +* Servers + + BaseHTTPServer + + CGIHTTPServer + + DocXMLRPCServer + + SimpleHTTPServer + + SimpleXMLRPCServer + + SocketServer + + +Modules reliant on obsolete/rarely used file formats? +----------------------------------------------------- + +Several modules in the stdlib work on a specific file format. It is +possible some of these formats are no longer used and thus the stdlib +modules for them can go. Below is a list of some modules which rely +on a file format that may be obsolete. + +* aifc + AIFF and AIFF-C audio files. Appears to be only user of the cl + module (which is undocumented). +* audioop + Raw (8|16|32)-bit wide audio files (as generated by the al and + sunaudiodev modules). +* binhex + binhex4 encoding. +* chunk + AIFF, AIFF-C, and RMFF audio files. +* sunau + Sun AU audio files [#sun-au]_. + + +Renaming of modules maintained outside of the stdlib +---------------------------------------------------- + +xml.etree.ElementTree not only does not meet PEP 8 naming standards +but it also has an exposed C implementation [#pep-0008]_. It is an +externally maintained package, though [#pep-0360]_. A request will be +made for the maintainer to change the name so that it matches PEP 8 +and hides the C implementation. + + +References +========== + +.. [#pep-0004] PEP 4: Deprecation of Standard Modules + (http://www.python.org/dev/pep-0004/) + +.. [#pep-0008] PEP 8: Style Guide for Python Code + (http://www.python.org/dev/pep-0008/) + +.. [#pep-0360] PEP 360: Externally Maintained Packages + (http://www.python.org/peps/pep-0360/) + +.. [#module-index] Python Documentation: Global Module Index + (http://docs.python.org/modindex.html) + +.. [#timing-module] Python Library Reference: Obsolete + (http://docs.python.org/lib/obsolete-modules.html) + +.. [#silly-old-stuff] Python-Dev email: "Py3k release schedule worries" + (http://mail.python.org/pipermail/python-3000/2006-December/005130.html) + +.. [#thread-deprecation] Python-Dev email: Autoloading? + (http://mail.python.org/pipermail/python-dev/2005-October/057244.html) + +.. [#py-dev-summary-2004-11-01] Python-Dev Summary: 2004-11-01 + (http://www.python.org/dev/summary/2004-11-01_2004-11-15/#id10) + +.. [#pyopengl] PyOpenGL + (http://pyopengl.sourceforge.net/) + +.. [#pil] Python Imaging Library (PIL) + (http://www.pythonware.com/products/pil/) + +.. [#twisted] Twisted + (http://twistedmatrix.com/trac/) + +.. [#irix-retirement] SGI Press Release: + End of General Availability for MIPS IRIX Products -- December 2006 + (http://www.sgi.com/support/mips_irix.html) + +.. [#irix-forms] FORMS Library by Mark Overmars + (ftp://ftp.cs.ruu.nl/pub/SGI/FORMS) + +.. [#sun-au] Wikipedia: Au file format + (http://en.wikipedia.org/wiki/Au_file_format) + + +Copyright +========= + +This document has been placed in the public domain. + + + +.. + Local Variables: + mode: indented-text + indent-tabs-mode: nil + sentence-end-double-space: t + fill-column: 70 + coding: utf-8 + End:
participants (1)
-
brett.cannon