[Python-checkins] r53204 - peps/trunk/pep-0000.txt peps/trunk/pep-3108.txt
brett.cannon
python-checkins at python.org
Tue Jan 2 01:02:42 CET 2007
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 at 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:
More information about the Python-checkins
mailing list