Python Enhancement Proposals

PEP 0 - Index of Python Enhancement Proposals (PEPs)

Meta-PEPs (PEPs about PEPs or Processes)

PEP 0001 -- PEP Purpose and Guidelines
PEP 0004 -- Deprecation of Standard Modules
PEP 0005 -- Guidelines for Language Evolution
PEP 0006 -- Bug Fix Releases
PEP 0007 -- Style Guide for C Code
PEP 0008 -- Style Guide for Python Code
PEP 0009 -- Sample Plaintext PEP Template
PEP 0010 -- Voting Guidelines
PEP 0011 -- Removing support for little used platforms
PEP 0012 -- Sample reStructuredText PEP Template

Other Informational PEPs

PEP 0020 -- The Zen of Python
PEP 0101 -- Doing Python Releases 101
PEP 0247 -- API for Cryptographic Hash Functions
PEP 0248 -- Python Database API Specification v1.0
PEP 0249 -- Python Database API Specification v2.0
PEP 0257 -- Docstring Conventions
PEP 0272 -- API for Block Encryption Algorithms v1.0
PEP 0287 -- reStructuredText Docstring Format
PEP 0290 -- Code Migration and Modernization
PEP 0291 -- Backward Compatibility for the Python 2 Standard Library
PEP 0333 -- Python Web Server Gateway Interface v1.0
PEP 0373 -- Python 2.7 Release Schedule
PEP 0392 -- Python 3.2 Release Schedule
PEP 0394 -- The "python" Command on Unix-Like Systems
PEP 0398 -- Python 3.3 Release Schedule
PEP 0399 -- Pure Python/C Accelerator Module Compatibility Requirements
PEP 0404 -- Python 2.8 Un-release Schedule
PEP 0411 -- Provisional packages in the Python standard library
PEP 0429 -- Python 3.4 Release Schedule
PEP 0430 -- Migrating to Python 3 as the default online documentation
PEP 3333 -- Python Web Server Gateway Interface v1.0.1

Accepted PEPs (accepted; may not be implemented yet)

PEP 0345 -- Metadata for Python Software Packages 1.2
PEP 0376 -- Database of Installed Python Distributions
PEP 0386 -- Changing the version comparison module in Distutils
PEP 0397 -- Python launcher for Windows
PEP 3121 -- Extension Module Initialization and Finalization

Open PEPs (under consideration)

PEP 0286 -- Enhanced Argument Tuples
PEP 0337 -- Logging Usage in the Standard Library
PEP 0368 -- Standard image protocol and class
PEP 0381 -- Mirroring infrastructure for PyPI
PEP 0387 -- Backwards Compatibility Policy
PEP 0390 -- Static metadata for Distutils
PEP 0396 -- Module Version Numbers
PEP 0400 -- Deprecate codecs.StreamReader and codecs.StreamWriter
PEP 0419 -- Protecting cleanup statements from interruptions
PEP 0422 -- Simple class initialisation hook
PEP 0423 -- Naming conventions and recipes related to packaging
PEP 0425 -- Compatibility Tags for Built Distributions
PEP 0426 -- Metadata for Python Software Packages 1.3
PEP 0427 -- The Wheel Binary Package Format 0.1
PEP 0428 -- The pathlib module -- object-oriented filesystem paths
PEP 0431 -- Time zone support improvements
PEP 0432 -- Simplifying the CPython startup sequence
PEP 0433 -- Add cloexec argument to functions creating file descriptors
PEP 0444 -- Python Web3 Interface
PEP 3124 -- Overloading, Generic Functions, Interfaces, and Adaptation
PEP 3142 -- Add a "while" clause to generator expressions
PEP 3143 -- Standard daemon process library
PEP 3145 -- Asynchronous I/O For subprocess.Popen
PEP 3152 -- Cofunctions
PEP 3154 -- Pickle protocol version 4
PEP 3156 -- Asynchronous IO Support Rebooted

Finished PEPs (done, implemented in code repository)

PEP 0100 -- Python Unicode Integration
PEP 0201 -- Lockstep Iteration
PEP 0202 -- List Comprehensions
PEP 0203 -- Augmented Assignments
PEP 0205 -- Weak References
PEP 0207 -- Rich Comparisons
PEP 0208 -- Reworking the Coercion Model
PEP 0214 -- Extended Print Statement
PEP 0217 -- Display Hook for Interactive Use
PEP 0218 -- Adding a Built-In Set Object Type
PEP 0221 -- Import As
PEP 0223 -- Change the Meaning of \x Escapes
PEP 0227 -- Statically Nested Scopes
PEP 0229 -- Using Distutils to Build Python
PEP 0230 -- Warning Framework
PEP 0232 -- Function Attributes
PEP 0234 -- Iterators
PEP 0235 -- Import on Case-Insensitive Platforms
PEP 0236 -- Back to the __future__
PEP 0237 -- Unifying Long Integers and Integers
PEP 0238 -- Changing the Division Operator
PEP 0241 -- Metadata for Python Software Packages
PEP 0250 -- Using site-packages on Windows
PEP 0252 -- Making Types Look More Like Classes
PEP 0253 -- Subtyping Built-in Types
PEP 0255 -- Simple Generators
PEP 0260 -- Simplify xrange()
PEP 0261 -- Support for "wide" Unicode characters
PEP 0263 -- Defining Python Source Code Encodings
PEP 0264 -- Future statements in simulated shells
PEP 0273 -- Import Modules from Zip Archives
PEP 0274 -- Dict Comprehensions
PEP 0277 -- Unicode file name support for Windows NT
PEP 0278 -- Universal Newline Support
PEP 0279 -- The enumerate() built-in function
PEP 0282 -- A Logging System
PEP 0285 -- Adding a bool type
PEP 0289 -- Generator Expressions
PEP 0292 -- Simpler String Substitutions
PEP 0293 -- Codec Error Handling Callbacks
PEP 0301 -- Package Index and Metadata for Distutils
PEP 0302 -- New Import Hooks
PEP 0305 -- CSV File API
PEP 0307 -- Extensions to the pickle protocol
PEP 0308 -- Conditional Expressions
PEP 0309 -- Partial Function Application
PEP 0311 -- Simplified Global Interpreter Lock Acquisition for Extensions
PEP 0314 -- Metadata for Python Software Packages v1.1
PEP 0318 -- Decorators for Functions and Methods
PEP 0322 -- Reverse Iteration
PEP 0324 -- subprocess - New process module
PEP 0327 -- Decimal Data Type
PEP 0328 -- Imports: Multi-Line and Absolute/Relative
PEP 0331 -- Locale-Independent Float/String Conversions
PEP 0338 -- Executing modules as scripts
PEP 0341 -- Unifying try-except and try-finally
PEP 0342 -- Coroutines via Enhanced Generators
PEP 0343 -- The "with" Statement
PEP 0352 -- Required Superclass for Exceptions
PEP 0353 -- Using ssize_t as the index type
PEP 0357 -- Allowing Any Object to be Used for Slicing
PEP 0358 -- The "bytes" Object
PEP 0362 -- Function Signature Object
PEP 0366 -- Main module explicit relative imports
PEP 0370 -- Per user site-packages directory
PEP 0371 -- Addition of the multiprocessing package to the standard library
PEP 0372 -- Adding an ordered dictionary to collections
PEP 0378 -- Format Specifier for Thousands Separator
PEP 0380 -- Syntax for Delegating to a Subgenerator
PEP 0383 -- Non-decodable Bytes in System Character Interfaces
PEP 0384 -- Defining a Stable ABI
PEP 0389 -- argparse - New Command Line Parsing Module
PEP 0391 -- Dictionary-Based Configuration For Logging
PEP 0393 -- Flexible String Representation
PEP 0405 -- Python Virtual Environments
PEP 0409 -- Suppressing exception context
PEP 0412 -- Key-Sharing Dictionary
PEP 0414 -- Explicit Unicode Literal for Python 3.3
PEP 0415 -- Implement context suppression with exception attributes
PEP 0417 -- Including mock in the Standard Library
PEP 0418 -- Add monotonic time, performance counter, and process time functions
PEP 0420 -- Implicit Namespace Packages
PEP 0421 -- Adding sys.implementation
PEP 0424 -- A method for exposing a length hint
PEP 3101 -- Advanced String Formatting
PEP 3102 -- Keyword-Only Arguments
PEP 3104 -- Access to Names in Outer Scopes
PEP 3105 -- Make print a function
PEP 3106 -- Revamping dict.keys(), .values() and .items()
PEP 3107 -- Function Annotations
PEP 3108 -- Standard Library Reorganization
PEP 3109 -- Raising Exceptions in Python 3000
PEP 3110 -- Catching Exceptions in Python 3000
PEP 3111 -- Simple input built-in in Python 3000
PEP 3112 -- Bytes literals in Python 3000
PEP 3113 -- Removal of Tuple Parameter Unpacking
PEP 3114 -- Renaming iterator.next() to iterator.__next__()
PEP 3115 -- Metaclasses in Python 3000
PEP 3116 -- New I/O
PEP 3118 -- Revising the buffer protocol
PEP 3119 -- Introducing Abstract Base Classes
PEP 3120 -- Using UTF-8 as the default source encoding
PEP 3123 -- Making PyObject_HEAD conform to standard C
PEP 3127 -- Integer Literal Support and Syntax
PEP 3129 -- Class Decorators
PEP 3131 -- Supporting Non-ASCII Identifiers
PEP 3132 -- Extended Iterable Unpacking
PEP 3134 -- Exception Chaining and Embedded Tracebacks
PEP 3135 -- New Super
PEP 3137 -- Immutable Bytes and Mutable Buffer
PEP 3138 -- String representation in Python 3000
PEP 3141 -- A Type Hierarchy for Numbers
PEP 3144 -- IP Address Manipulation Library for the Python Standard Library
PEP 3147 -- PYC Repository Directories
PEP 3148 -- futures - execute computations asynchronously
PEP 3149 -- ABI version tagged .so files
PEP 3151 -- Reworking the OS and IO exception hierarchy
PEP 3155 -- Qualified name for classes and functions

Historical Meta-PEPs and Informational PEPs

PEP 0002 -- Procedure for Adding New Modules
PEP 0042 -- Feature Requests
PEP 0160 -- Python 1.6 Release Schedule
PEP 0200 -- Python 2.0 Release Schedule
PEP 0226 -- Python 2.1 Release Schedule
PEP 0251 -- Python 2.2 Release Schedule
PEP 0283 -- Python 2.3 Release Schedule
PEP 0320 -- Python 2.4 Release Schedule
PEP 0347 -- Migrating the Python CVS to Subversion
PEP 0356 -- Python 2.5 Release Schedule
PEP 0360 -- Externally Maintained Packages
PEP 0361 -- Python 2.6 and 3.0 Release Schedule
PEP 0374 -- Choosing a distributed VCS for the Python project
PEP 0375 -- Python 3.1 Release Schedule
PEP 0385 -- Migrating from Subversion to Mercurial
PEP 0401 -- BDFL Retirement
PEP 3000 -- Python 3000
PEP 3002 -- Procedure for Backwards-Incompatible Changes
PEP 3003 -- Python Language Moratorium
PEP 3099 -- Things that will Not Change in Python 3000
PEP 3100 -- Miscellaneous Python 3.0 Plans

Deferred PEPs

PEP 0211 -- Adding A New Outer Product Operator
PEP 0212 -- Loop Counter Iteration
PEP 0213 -- Attribute Access Handlers
PEP 0219 -- Stackless Python
PEP 0222 -- Web Library Enhancements
PEP 0225 -- Elementwise/Objectwise Operators
PEP 0233 -- Python Online Help
PEP 0262 -- A Database of Installed Python Packages
PEP 0267 -- Optimized Access to Module Namespaces
PEP 0269 -- Pgen Module for Python
PEP 0280 -- Optimizing access to globals
PEP 0312 -- Simple Implicit Lambda
PEP 0315 -- Enhanced While Loop
PEP 0316 -- Programming by Contract for Python
PEP 0323 -- Copyable Iterators
PEP 0349 -- Allow str() to return unicode strings
PEP 0395 -- Qualified Names for Modules
PEP 0403 -- General purpose decorator clause (aka "@in" clause)
PEP 0406 -- Improved Encapsulation of Import State
PEP 0407 -- New release cycle and introducing long-term support versions
PEP 0413 -- Faster evolution of the Python Standard Library
PEP 0628 -- Add ``math.tau``
PEP 3150 -- Statement local namespaces (aka "given" clause)

Abandoned, Withdrawn, and Rejected PEPs

PEP 0003 -- Guidelines for Handling Bug Reports
PEP 0102 -- Doing Python Micro Releases
PEP 0204 -- Range Literals
PEP 0206 -- Python Advanced Library
PEP 0209 -- Multi-dimensional Arrays
PEP 0210 -- Decoupling the Interpreter Loop
PEP 0215 -- String Interpolation
PEP 0216 -- Docstring Format
PEP 0220 -- Coroutines, Generators, Continuations
PEP 0224 -- Attribute Docstrings
PEP 0228 -- Reworking Python's Numeric Model
PEP 0231 -- __findattr__()
PEP 0239 -- Adding a Rational Type to Python
PEP 0240 -- Adding a Rational Literal to Python
PEP 0242 -- Numeric Kinds
PEP 0243 -- Module Repository Upload Mechanism
PEP 0244 -- The `directive' statement
PEP 0245 -- Python Interface Syntax
PEP 0246 -- Object Adaptation
PEP 0254 -- Making Classes Look More Like Types
PEP 0256 -- Docstring Processing System Framework
PEP 0258 -- Docutils Design Specification
PEP 0259 -- Omit printing newline after newline
PEP 0265 -- Sorting Dictionaries by Value
PEP 0266 -- Optimizing Global Variable/Attribute Access
PEP 0268 -- Extended HTTP functionality and WebDAV
PEP 0270 -- uniq method for list objects
PEP 0271 -- Prefixing sys.path by command line option
PEP 0275 -- Switching on Multiple Values
PEP 0276 -- Simple Iterator for ints
PEP 0281 -- Loop Counter Iteration with range and xrange
PEP 0284 -- Integer for-loops
PEP 0288 -- Generators Attributes and Exceptions
PEP 0294 -- Type Names in the types Module
PEP 0295 -- Interpretation of multiline string constants
PEP 0296 -- Adding a bytes Object Type
PEP 0297 -- Support for System Upgrades
PEP 0298 -- The Locked Buffer Interface
PEP 0299 -- Special __main__() function in modules
PEP 0303 -- Extend divmod() for Multiple Divisors
PEP 0304 -- Controlling Generation of Bytecode Files
PEP 0306 -- How to Change Python's Grammar
PEP 0310 -- Reliable Acquisition/Release Pairs
PEP 0313 -- Adding Roman Numeral Literals to Python
PEP 0317 -- Eliminate Implicit Exception Instantiation
PEP 0319 -- Python Synchronize/Asynchronize Block
PEP 0321 -- Date/Time Parsing and Formatting
PEP 0325 -- Resource-Release Support for Generators
PEP 0326 -- A Case for Top and Bottom Values
PEP 0329 -- Treating Builtins as Constants in the Standard Library
PEP 0330 -- Python Bytecode Verification
PEP 0332 -- Byte vectors and String/Unicode Unification
PEP 0334 -- Simple Coroutines via SuspendIteration
PEP 0335 -- Overloadable Boolean Operators
PEP 0336 -- Make None Callable
PEP 0339 -- Design of the CPython Compiler
PEP 0340 -- Anonymous Block Statements
PEP 0344 -- Exception Chaining and Embedded Tracebacks
PEP 0346 -- User Defined ("``with``") Statements
PEP 0348 -- Exception Reorganization for Python 3.0
PEP 0350 -- Codetags
PEP 0351 -- The freeze protocol
PEP 0354 -- Enumerations in Python
PEP 0355 -- Path - Object oriented filesystem paths
PEP 0359 -- The "make" Statement
PEP 0363 -- Syntax For Dynamic Attribute Access
PEP 0364 -- Transitioning to the Py3K Standard Library
PEP 0365 -- Adding the pkg_resources module
PEP 0367 -- New Super
PEP 0369 -- Post import hooks
PEP 0377 -- Allow __enter__() methods to skip the statement body
PEP 0379 -- Adding an Assignment Expression
PEP 0382 -- Namespace Packages
PEP 0402 -- Simplified Package Layout and Partitioning
PEP 0408 -- Standard library __preview__ package
PEP 0410 -- Use decimal.Decimal type for timestamps
PEP 0416 -- Add a frozendict builtin type
PEP 0666 -- Reject Foolish Indentation
PEP 0754 -- IEEE 754 Floating Point Special Values
PEP 3001 -- Procedure for reviewing and improving standard library modules
PEP 3103 -- A Switch/Case Statement
PEP 3117 -- Postfix type declarations
PEP 3122 -- Delineation of the main module
PEP 3125 -- Remove Backslash Continuation
PEP 3126 -- Remove Implicit String Concatenation
PEP 3128 -- BList: A Faster List-like Type
PEP 3130 -- Access to Current Module/Class/Function
PEP 3133 -- Introducing Roles
PEP 3136 -- Labeled break and continue
PEP 3139 -- Cleaning out sys and the "interpreter" module
PEP 3140 -- str(container) should call str(item), not repr(item)
PEP 3146 -- Merging Unladen Swallow into CPython
PEP 3153 -- Asynchronous IO support

A side project by Dougal Matthews | Source Code | Stats