The advent of type hints in Python uncovered two glaring usability issues
with the functionality of annotations added in PEP 3107 and refined
further in PEP 526:

annotations could only use names which were already available in the
current scope, in other words they didn’t support forward references
of any kind; and

annotating source code had adverse effects on startup time of Python
programs.

Both of these issues are fixed by postponing the evaluation of
annotations. Instead of compiling code which executes expressions in
annotations at their definition time, the compiler stores the annotation
in a string form equivalent to the AST of the expression in question.
If needed, annotations can be resolved at runtime using
typing.get_type_hints(). In the common case where this is not
required, the annotations are cheaper to store (since short strings
are interned by the interpreter) and make startup time faster.

Usability-wise, annotations now support forward references, making the
following syntax valid:

An ongoing challenge within the Python 3 series has been determining a sensible
default strategy for handling the “7-bit ASCII” text encoding assumption
currently implied by the use of the default C or POSIX locale on non-Windows
platforms.

PEP 538 updates the default interpreter command line interface to
automatically coerce that locale to an available UTF-8 based locale as
described in the documentation of the new PYTHONCOERCECLOCALE
environment variable. Automatically setting LC_CTYPE this way means that
both the core interpreter and locale-aware C extensions (such as
readline) will assume the use of UTF-8 as the default text encoding,
rather than ASCII.

The platform support definition in PEP 11 has also been updated to limit
full text handling support to suitably configured non-ASCII based locales.

As part of this change, the default error handler for stdin and
stdout is now surrogateescape (rather than strict) when
using any of the defined coercion target locales (currently C.UTF-8,
C.utf8, and UTF-8). The default error handler for stderr
continues to be backslashreplace, regardless of locale.

Locale coercion is silent by default, but to assist in debugging potentially
locale related integration problems, explicit warnings (emitted directly on
stderr) can be requested by setting PYTHONCOERCECLOCALE=warn.
This setting will also cause the Python runtime to emit a warning if the
legacy C locale remains active when the core interpreter is initialized.

While PEP 538’s locale coercion has the benefit of also affecting extension
modules (such as GNU readline), as well as child processes (including those
running non-Python applications and older versions of Python), it has the
downside of requiring that a suitable target locale be present on the running
system. To better handle the case where no suitable target locale is available
(as occurs on RHEL/CentOS 7, for example), Python 3.7 also implements
PEP 540: Forced UTF-8 Runtime Mode.

The new -Xutf8 command line option and PYTHONUTF8
environment variable can be used to enable the CPython UTF-8 mode.

When in UTF-8 mode, CPython ignores the locale settings, and uses the
UTF-8 encoding by default. The error handlers for sys.stdin and
sys.stdout streams are set to surrogateescape.

The forced UTF-8 mode can be used to change the text handling behavior in
an embedded Python interpreter without changing the locale settings of
an embedding application.

While PEP 540’s UTF-8 mode has the benefit of working regardless of which
locales are available on the running system, it has the downside of having no
effect on extension modules (such as GNU readline), child processes running
non-Python applications, and child processes running older versions of Python.
To reduce the risk of corrupting text data when communicating with such
components, Python 3.7 also implements PEP 540: Forced UTF-8 Runtime Mode).

The UTF-8 mode is enabled by default when the locale is C or POSIX, and
the PEP 538 locale coercion feature fails to change it to a UTF-8 based
alternative (whether that failure is due to PYTHONCOERCECLOCALE=0 being set,
LC_ALL being set, or the lack of a suitable target locale).

Python 3.7 includes the new built-in breakpoint() function as
an easy and consistent way to enter the Python debugger.

Built-in breakpoint() calls sys.breakpointhook(). By default, the
latter imports pdb and then calls pdb.set_trace(), but by binding
sys.breakpointhook() to the function of your choosing, breakpoint() can
enter any debugger. Additionally, the environment variable
PYTHONBREAKPOINT can be set to the callable of your debugger of
choice. Set PYTHONBREAKPOINT=0 to completely disable built-in
breakpoint().

While Python provides a C API for thread-local storage support; the existing
Thread Local Storage (TLS) API has used
int to represent TLS keys across all platforms. This has not
generally been a problem for officially-support platforms, but that is neither
POSIX-compliant, nor portable in any practical sense.

PEP 539 changes this by providing a new Thread Specific Storage (TSS)
API to CPython which supersedes use of the
existing TLS API within the CPython interpreter, while deprecating the existing
API. The TSS API uses a new type Py_tss_t instead of int
to represent TSS keys–an opaque type the definition of which may depend on
the underlying TLS implementation. Therefore, this will allow to build CPython
on platforms where the native TLS key is defined in a way that cannot be safely
cast to int.

Note that on platforms where the native TLS key is defined in a way that cannot
be safely cast to int, all functions of the existing TLS API will be
no-op and immediately return failure. This indicates clearly that the old API
is not supported on platforms where it cannot be used reliably, and that no
effort will be made to add such support.

The resolution of clocks in modern systems can exceed the limited precision
of a floating point number returned by the time.time() function
and its variants. To avoid loss of precision, PEP 564 adds six new
“nanosecond” variants of the existing timer functions to the time
module:

The default handling of DeprecationWarning has been changed such that
these warnings are once more shown by default, but only when the code
triggering them is running directly in the __main__ module. As a result,
developers of single file scripts and those using Python interactively should
once again start seeing deprecation warnings for the APIs they use, but
deprecation warnings triggered by imported application, library and framework
modules will continue to be hidden by default.

As a result of this change, the standard library now allows developers to choose
between three different deprecation warning behaviours:

FutureWarning: always displayed by default, recommended for warnings
intended to be seen by application end users (e.g. for deprecated application
configuration settings).

DeprecationWarning: displayed by default only in __main__ and when
running tests, recommended for warnings intended to be seen by other Python
developers where a version upgrade may result in changed behaviour or an
error.

Previously both DeprecationWarning and PendingDeprecationWarning
were only visible when running tests, which meant that developers primarily
writing single file scripts or using Python interactively could be surprised
by breaking changes in the APIs they used.

Initially PEP 484 was designed in such way that it would not introduce any
changes to the core CPython interpreter. Now type hints and the typing
module are extensively used by the community, so this restriction is removed.
The PEP introduces two special methods __class_getitem__() and
__mro_entries__, these methods are now used by most classes and special
constructs in typing. As a result, the speed of various operations
with types increased up to 7 times, the generic types can be used without
metaclass conflicts, and several long standing bugs in typing module are
fixed.

Python has traditionally checked the up-to-dateness of bytecode cache files
(i.e., .pyc files) by comparing the source metadata (last-modified timestamp
and size) with source metadata saved in the cache file header when it was
generated. While effective, this invalidation method has its drawbacks. When
filesystem timestamps are too coarse, Python can miss source updates, leading to
user confusion. Additionally, having a timestamp in the cache file is
problematic for build reproducibility and
content-based build systems.

PEP 552 extends the pyc format to allow the hash of the source file to be
used for invalidation instead of the source timestamp. Such .pyc files are
called “hash-based”. By default, Python still uses timestamp-based invalidation
and does not generate hash-based .pyc files at runtime. Hash-based .pyc
files may be generated with py_compile or compileall.

Hash-based .pyc files come in two variants: checked and unchecked. Python
validates checked hash-based .pyc files against the corresponding source
files at runtime but doesn’t do so for unchecked hash-based pycs. Unchecked
hash-based .pyc files are a useful performance optimization for environments
where a system external to Python (e.g., the build system) is responsible for
keeping .pyc files up-to-date.

The new -Xdev command line option or the new
PYTHONDEVMODE environment variable can be used to enable
CPython’s development mode. When in development mode, CPython performs
additional runtime checks that are too expensive to be enabled by default.
See -Xdev documentation for the full description of the effects
of this mode.

str, bytes, and bytearray gained support for
the new isascii() method, which can be used to
test if a string or bytes contain only the ASCII characters.
(Contributed by INADA Naoki in bpo-32677.)

ImportError now displays module name and module __file__ path when
from...import... fails. (Contributed by Matthias Bussonnier in
bpo-29546.)

Circular imports involving absolute imports with binding a submodule to
a name are now supported.
(Contributed by Serhiy Storchaka in bpo-30024.)

object.__format__(x,'') is now equivalent to str(x) rather than
format(str(self),'').
(Contributed by Serhiy Storchaka in bpo-28974.)

In order to better support dynamic creation of stack traces,
types.TracebackType can now be instantiated from Python code, and
the tb_next attribute on tracebacks is now
writable.
(Contributed by Nathaniel J. Smith in bpo-30579.)

When using the -m switch, sys.path[0] is now eagerly expanded
to the full starting directory path, rather than being left as the empty
directory (which allows imports from the current working directory at the
time when an import occurs)
(Contributed by Nick Coghlan in bpo-33053.)

The new -Ximporttime option or the
PYTHONPROFILEIMPORTTIME environment variable can be used to show
the timing of each module import.
(Contributed by Victor Stinner in bpo-31415.)

The new contextvars module and a set of
new C APIs introduce
support for context variables. Context variables are conceptually
similar to thread-local variables. Unlike TLS, context variables
support asynchronous code correctly.

The asyncio and decimal modules have been updated to use
and support context variables out of the box. Particularly the active
decimal context is now stored in a context variable, which allows
decimal operations to work with the correct context in asynchronous code.

The new dataclass() decorator provides a way to declare
data classes. A data class describes its attributes using class variable
annotations. Its constructor and other magic methods, such as
__repr__(), __eq__(), and
__hash__() are generated automatically.

The new importlib.resources module provides several new APIs and one
new ABC for access to, opening, and reading resources inside packages.
Resources are roughly similar to files inside packages, but they needn’t
be actual files on the physical file system. Module loaders can provide a
get_resource_reader() function which returns
a importlib.abc.ResourceReader instance to support this
new API. Built-in file path loaders and zip file loaders both support this.

The dis() function is now able to
disassemble nested code objects (the code of comprehensions, generator
expressions and nested functions, and the code used for building nested
classes). The maximum depth of disassembly recursion is controlled by
the new depth parameter.
(Contributed by Serhiy Storchaka in bpo-11822.)

The Enum learned the new _ignore_ class property,
which allows listing the names of properties which should not become
enum members.
(Contributed by Ethan Furman in bpo-31801.)

In Python 3.8, attempting to check for non-Enum objects in Enum
classes will raise a TypeError (e.g. 1inColor); similarly,
attempting to check for non-Flag objects in a Flag member will
raise TypeError (e.g. 1inPerm.RW); currently, both operations
return False instead and are deprecated.
(Contributed by Ethan Furman in bpo-33217.)

The new gc.freeze() function allows freezing all objects tracked
by the garbage collector and excluding them from future collections.
This can be used before a POSIX fork() call to make the GC copy-on-write
friendly or to speed up collection. The new gc.unfreeze() functions
reverses this operation. Additionally, gc.get_freeze_count() can
be used to obtain the number of frozen objects.
(Contributed by Li Zekun in bpo-31558.)

SimpleHTTPRequestHandler now supports the HTTP
If-Modified-Since header. The server returns the 304 response status if
the target file was not modified after the time specified in the header.
(Contributed by Pierre Quentel in bpo-29654.)

SimpleHTTPRequestHandler accepts the new directory
argument, in addition to the new --directory command line argument.
With this parameter, the server serves the specified directory, by default it
uses the current working directory.
(Contributed by Stéphane Wirtel and Julien Palard in bpo-28707.)

The new ThreadingHTTPServer class
uses threads to handle requests using ThreadingMixin.
It is used when http.server is run with -m.
(Contributed by Julien Palard in bpo-31639.)

The Settings dialog (Options, Configure IDLE) has been partly rewritten
to improve both appearance and function.
(Contributed by Cheryl Sabella and Terry Jan Reedy in multiple issues.)

The font sample now includes a selection of non-Latin characters so that
users can better see the effect of selecting a particular font.
(Contributed by Terry Jan Reedy in bpo-13802.)
The sample can be edited to include other characters.
(Contributed by Serhiy Storchaka in bpo-31860.)

The IDLE features formerly implemented as extensions have been reimplemented
as normal features. Their settings have been moved from the Extensions tab
to other dialog tabs.
(Contributed by Charles Wohlganger and Terry Jan Reedy in bpo-27099.)

Editor code context option revised. Box displays all context lines up to
maxlines. Clicking on a context line jumps the editor to that line. Context
colors for custom themes is added to Highlights tab of Settings dialog.
(Contributed by Cheryl Sabella and Terry Jan Reedy in bpo-33642,
bpo-33768, and bpo-33679.)

On Windows, a new API call tells Windows that tk scales for DPI. On Windows
8.1+ or 10, with DPI compatibility properties of the Python binary
unchanged, and a monitor resolution greater than 96 DPI, this should
make text and lines sharper. It should otherwise have no effect.
(Contributed by Terry Jan Reedy in bpo-33656.)

New in 3.7.1:

Output over N lines (50 by default) is squeezed down to a button.
N can be changed in the PyShell section of the General page of the
Settings dialog. Fewer, but possibly extra long, lines can be squeezed by
right clicking on the output. Squeezed output can be expanded in place
by double-clicking the button or into the clipboard or a separate window
by right-clicking the button. (Contributed by Tal Einat in bpo-1529353.)

The changes above have been backported to 3.6 maintenance releases.

NEW in 3.7.4:

Add “Run Customized” to the Run menu to run a module with customized
settings. Any command line arguments entered are added to sys.argv.
They re-appear in the box for the next customized run. One can also
suppress the normal Shell main module restart. (Contributed by Cheryl
Sabella, Terry Jan Reedy, and others in bpo-5680 and bpo-37627.)

New in 3.7.5:

Add optional line numbers for IDLE editor windows. Windows
open without line numbers unless set otherwise in the General
tab of the configuration dialog. Line numbers for an existing
window are shown and hidden in the Options menu.
(Contributed by Tal Einat and Saimadhav Heblikar in bpo-17535.)

The new Process.close() method
explicitly closes the process object and releases all resources associated
with it. ValueError is raised if the underlying process is still
running.
(Contributed by Antoine Pitrou in bpo-30596.)

The new Process.kill() method can
be used to terminate the process using the SIGKILL signal on Unix.
(Contributed by Vitor Pereira in bpo-30794.)

Non-daemonic threads created by Process are now
joined on process exit.
(Contributed by Antoine Pitrou in bpo-18966.)

py_compile.compile() – and by extension, compileall – now
respects the SOURCE_DATE_EPOCH environment variable by
unconditionally creating .pyc files for hash-based validation.
This allows for guaranteeing
reproducible builds of .pyc
files when they are created eagerly. (Contributed by Bernhard M. Wiedemann
in bpo-29708.)

The flags re.ASCII, re.LOCALE and re.UNICODE
can be set within the scope of a group.
(Contributed by Serhiy Storchaka in bpo-31690.)

re.split() now supports splitting on a pattern like r'\b',
'^$' or (?=-) that matches an empty string.
(Contributed by Serhiy Storchaka in bpo-25054.)

Regular expressions compiled with the re.LOCALE flag no longer
depend on the locale at compile time. Locale settings are applied only
when the compiled regular expression is used.
(Contributed by Serhiy Storchaka in bpo-30215.)

FutureWarning is now emitted if a regular expression contains
character set constructs that will change semantically in the future,
such as nested sets and set operations.
(Contributed by Serhiy Storchaka in bpo-30349.)

The new warn_on_full_buffer argument to the signal.set_wakeup_fd()
function makes it possible to specify whether Python prints a warning on
stderr when the wakeup buffer overflows.
(Contributed by Nathaniel J. Smith in bpo-30050.)

The new socket.getblocking() method
returns True if the socket is in blocking mode and False otherwise.
(Contributed by Yury Selivanov in bpo-32373.)

The new socket.close() function closes the passed socket file descriptor.
This function should be used instead of os.close() for better
compatibility across platforms.
(Contributed by Christian Heimes in bpo-32454.)

The ssl module now uses OpenSSL’s builtin API instead of
match_hostname() to check a host name or an IP address. Values
are validated during TLS handshake. Any certificate validation error
including failing the host name check now raises
SSLCertVerificationError and aborts the handshake with a proper
TLS Alert message. The new exception contains additional information.
Host name validation can be customized with
SSLContext.hostname_checks_common_name.
(Contributed by Christian Heimes in bpo-31399.)

Note

The improved host name check requires a libssl implementation compatible
with OpenSSL 1.0.2 or 1.1. Consequently, OpenSSL 0.9.8 and 1.0.1 are no
longer supported (see Platform Support Removals for more details).
The ssl module is mostly compatible with LibreSSL 2.7.2 and newer.

The default cipher suite selection of the ssl module now uses a blacklist
approach rather than a hard-coded whitelist. Python no longer re-enables
ciphers that have been blocked by OpenSSL security updates. Default cipher
suite selection can be configured at compile time.
(Contributed by Christian Heimes in bpo-31429.)

Validation of server certificates containing internationalized domain names
(IDNs) is now supported. As part of this change, the
SSLSocket.server_hostname attribute
now stores the expected hostname in A-label form ("xn--pythn-mua.org"),
rather than the U-label form ("pythön.org"). (Contributed by
Nathaniel J. Smith and Christian Heimes in bpo-28414.)

The ssl module has preliminary and experimental support for TLS 1.3 and
OpenSSL 1.1.1. At the time of Python 3.7.0 release, OpenSSL 1.1.1 is still
under development and TLS 1.3 hasn’t been finalized yet. The TLS 1.3
handshake and protocol behaves slightly differently than TLS 1.2 and earlier,
see TLS 1.3.
(Contributed by Christian Heimes in bpo-32947, bpo-20995,
bpo-29136, bpo-30622 and bpo-33618)

The subprocess.run() function accepts the new capture_output
keyword argument. When true, stdout and stderr will be captured.
This is equivalent to passing subprocess.PIPE as stdout and
stderr arguments.
(Contributed by Bo Bayles in bpo-32102.)

The subprocess.run function and the subprocess.Popen constructor
now accept the text keyword argument as an alias
to universal_newlines.
(Contributed by Andrew Clegg in bpo-31756.)

On Windows the default for close_fds was changed from False to
True when redirecting the standard handles. It’s now possible to set
close_fds to true when redirecting the standard handles. See
subprocess.Popen. This means that close_fds now defaults to
True on all supported platforms.
(Contributed by Segev Finer in bpo-19764.)

The subprocess module is now more graceful when handling
KeyboardInterrupt during subprocess.call(),
subprocess.run(), or in a Popen
context manager. It now waits a short amount of time for the child
to exit, before continuing the handling of the KeyboardInterrupt
exception.
(Contributed by Gregory P. Smith in bpo-25942.)

tracemalloc.Traceback behaves more like regular tracebacks,
sorting the frames from oldest to most recent.
Traceback.format()
now accepts negative limit, truncating the result to the
abs(limit) oldest frames. To get the old behaviour, use
the new most_recent_first argument to Traceback.format().
(Contributed by Jesse Bakker in bpo-32121.)

The new -k command-line option allows filtering tests by a name
substring or a Unix shell-like pattern.
For example, python-munittest-kfoo runs
foo_tests.SomeTest.test_something, bar_tests.SomeTest.test_foo,
but not bar_tests.FooTest.test_something.
(Contributed by Jonas Haag in bpo-32071.)

The new seal() function allows sealing
Mock instances, which will disallow further creation
of attribute mocks. The seal is applied recursively to all attributes that
are themselves mocks.
(Contributed by Mario Corchero in bpo-30541.)

The new UUID.is_safe attribute relays information
from the platform about whether generated UUIDs are generated with a
multiprocessing-safe method.
(Contributed by Barry Warsaw in bpo-22807.)

uuid.getnode() now prefers universally administered
MAC addresses over locally administered MAC addresses.
This makes a better guarantee for global uniqueness of UUIDs returned
from uuid.uuid1(). If only locally administered MAC addresses are
available, the first such one found is returned.
(Contributed by Barry Warsaw in bpo-32107.)

ElementPath predicates in the find()
methods can now compare text of the current node with [.="text"],
not only text in children. Predicates also allow adding spaces for
better readability. (Contributed by Stefan Behnel in bpo-31648.)

Function create_archive() now accepts an optional filter
argument to allow the user to select which files should be included in the
archive. (Contributed by Irmen de Jong in bpo-31072.)

Function create_archive() now accepts an optional compressed
argument to generate a compressed archive. A command line option
--compress has also been added to support compression.
(Contributed by Zhiming Wang in bpo-31638.)

The PyExc_RecursionErrorInst singleton that was part of the public API
has been removed as its members being never cleared may cause a segfault
during finalization of the interpreter. Contributed by Xavier de Gaye in
bpo-22898 and bpo-30697.

The type of results of PyThread_start_new_thread() and
PyThread_get_thread_ident(), and the id parameter of
PyThreadState_SetAsyncExc() changed from long to
unsignedlong.
(Contributed by Serhiy Storchaka in bpo-6532.)

Changes to the startup sequence and the management of dynamic memory
allocators mean that the long documented requirement to call
Py_Initialize() before calling most C API functions is now
relied on more heavily, and failing to abide by it may lead to segfaults in
embedding applications. See the Porting to Python 3.7 section in this
document and the Before Python Initialization section in the C API documentation
for more details.

Support for building --without-threads has been removed. The
threading module is now always available.
(Contributed by Antoine Pitrou in bpo-31370.).

A full copy of libffi is no longer bundled for use when building the
_ctypes module on non-OSX UNIX platforms. An installed copy
of libffi is now required when building _ctypes on such platforms.
(Contributed by Zachary Ware in bpo-27979.)

The Windows build process no longer depends on Subversion to pull in external
sources, a Python script is used to download zipfiles from GitHub instead.
If Python 3.6 is not found on the system (via py-3.6), NuGet is used to
download a copy of 32-bit Python for this purpose. (Contributed by Zachary
Ware in bpo-30450.)

The ssl module requires OpenSSL 1.0.2 or 1.1 compatible libssl.
OpenSSL 1.0.1 has reached end of lifetime on 2016-12-31 and is no longer
supported. LibreSSL is temporarily not supported as well. LibreSSL releases
up to version 2.6.4 are missing required OpenSSL 1.0.2 APIs.

The overhead of calling many methods of various standard library classes
implemented in C has been significantly reduced by porting more code
to use the METH_FASTCALL convention.
(Contributed by Victor Stinner in bpo-29300, bpo-29507,
bpo-29452, and bpo-29286.)

Various optimizations have reduced Python startup time by 10% on Linux and
up to 30% on macOS.
(Contributed by Victor Stinner, INADA Naoki in bpo-29585, and
Ivan Levkivskyi in bpo-31333.)

Method calls are now up to 20% faster due to the bytecode changes which
avoid creating bound method instances.
(Contributed by Yury Selivanov and INADA Naoki in bpo-26110.)

The asyncio module received a number of notable optimizations for
commonly used functions:

Searching for certain Unicode characters (like Ukrainian capital “Є”)
in a string was up to 25 times slower than searching for other characters.
It is now only 3 times slower in the worst case.
(Contributed by Serhiy Storchaka in bpo-24821.)

The collections.namedtuple() factory has been reimplemented to
make the creation of named tuples 4 to 6 times faster.
(Contributed by Jelle Zijlstra with further improvements by INADA Naoki,
Serhiy Storchaka, and Raymond Hettinger in bpo-28638.)

date.fromordinal() and date.fromtimestamp() are now up to
30% faster in the common case.
(Contributed by Paul Ganssle in bpo-32403.)

Optimized case-insensitive matching and searching of regularexpressions. Searching some patterns can now be up to 20 times faster.
(Contributed by Serhiy Storchaka in bpo-30285.)

re.compile() now converts flags parameter to int object if
it is RegexFlag. It is now as fast as Python 3.5, and faster than
Python 3.6 by about 10% depending on the pattern.
(Contributed by INADA Naoki in bpo-31671.)

Constant folding has been moved from the peephole optimizer to the new AST
optimizer, which is able perform optimizations more consistently.
(Contributed by Eugene Toder and INADA Naoki in bpo-29469 and
bpo-11549.)

Most functions and methods in abc have been rewritten in C.
This makes creation of abstract base classes, and calling isinstance()
and issubclass() on them 1.5x faster. This also reduces Python
start-up time by up to 10%. (Contributed by Ivan Levkivskyi and INADA Naoki
in bpo-31333)

Significant speed improvements to alternate constructors for
datetime.date and datetime.datetime by using fast-path
constructors when not constructing subclasses. (Contributed by Paul Ganssle
in bpo-32403)

The speed of comparison of array.array instances has been
improved considerably in certain cases. It is now from 10x to 70x faster
when comparing arrays holding values of the same integer type.
(Contributed by Adrian Wielgosik in bpo-24700.)

The math.erf() and math.erfc() functions now use the (faster)
C library implementation on most platforms.
(Contributed by Serhiy Storchaka in bpo-26121.)

Trace hooks may now opt out of receiving the line and opt into receiving
the opcode events from the interpreter by setting the corresponding new
f_trace_lines and f_trace_opcodes attributes on the
frame being traced. (Contributed by Nick Coghlan in bpo-31344.)

Fixed some consistency problems with namespace package module attributes.
Namespace module objects now have an __file__ that is set to None
(previously unset), and their __spec__.origin is also set to None
(previously the string "namespace"). See bpo-32305. Also, the
namespace module object’s __spec__.loader is set to the same value as
__loader__ (previously, the former was set to None). See
bpo-32303.

The locals() dictionary now displays in the lexical order that
variables were defined. Previously, the order was undefined.
(Contributed by Raymond Hettinger in bpo-32690.)

The distutilsupload command no longer tries to change CR
end-of-line characters to CRLF. This fixes a corruption issue with sdists
that ended with a byte equivalent to CR.
(Contributed by Bo Bayles in bpo-32304.)

Yield expressions (both yield and yieldfrom clauses) are now deprecated
in comprehensions and generator expressions (aside from the iterable expression
in the leftmost for clause). This ensures that comprehensions
always immediately return a container of the appropriate type (rather than
potentially returning a generator iterator object), while generator
expressions won’t attempt to interleave their implicit output with the output
from any explicit yield expressions. In Python 3.7, such expressions emit
DeprecationWarning when compiled, in Python 3.8 this will be a
SyntaxError.
(Contributed by Serhiy Storchaka in bpo-10544.)

Support for directly await-ing instances of asyncio.Lock and
other asyncio synchronization primitives has been deprecated. An
asynchronous context manager must be used in order to acquire and release
the synchronization resource.
(Contributed by Andrew Svetlov in bpo-32253.)

In Python 3.8, the abstract base classes in collections.abc will no
longer be exposed in the regular collections module. This will help
create a clearer distinction between the concrete classes and the abstract
base classes.
(Contributed by Serhiy Storchaka in bpo-25988.)

dbm.dumb now supports reading read-only files and no longer writes the
index file when it is not changed. A deprecation warning is now emitted
if the index file is missing and recreated in the 'r' and 'w'
modes (this will be an error in future Python releases).
(Contributed by Serhiy Storchaka in bpo-28847.)

In Python 3.8, attempting to check for non-Enum objects in Enum
classes will raise a TypeError (e.g. 1inColor); similarly,
attempting to check for non-Flag objects in a Flag member will
raise TypeError (e.g. 1inPerm.RW); currently, both operations
return False instead.
(Contributed by Ethan Furman in bpo-33217.)

The silent argument value truncation in socket.htons() and
socket.ntohs() has been deprecated. In future versions of Python,
if the passed argument is larger than 16 bits, an exception will be raised.
(Contributed by Oren Milman in bpo-28332.)

Function PySlice_GetIndicesEx() is deprecated and replaced with
a macro if Py_LIMITED_API is not set or set to a value in the range
between 0x03050400 and 0x03060000 (not inclusive), or is 0x03060100
or higher. (Contributed by Serhiy Storchaka in bpo-27867.)

For full Unicode support, including within extension modules, *nix platforms
are now expected to provide at least one of C.UTF-8 (full locale),
C.utf8 (full locale) or UTF-8 (LC_CTYPE-only locale) as an
alternative to the legacy ASCII-based C locale.

OpenSSL 0.9.8 and 1.0.1 are no longer supported, which means building CPython
3.7 with SSL/TLS support on older platforms still using these versions
requires custom build options that link to a more recent version of OpenSSL.

Notably, this issue affects the Debian 8 (aka “jessie”) and Ubuntu 14.04
(aka “Trusty”) LTS Linux distributions, as they still use OpenSSL 1.0.1 by
default.

Debian 9 (“stretch”) and Ubuntu 16.04 (“xenial”), as well as recent releases
of other LTS Linux releases (e.g. RHEL/CentOS 7.5, SLES 12-SP3), use OpenSSL
1.0.2 or later, and remain supported in the default build configuration.

The os.stat_float_times() function has been removed. It was introduced in
Python 2.3 for backward compatibility with Python 2.2, and was deprecated
since Python 3.1.

Unknown escapes consisting of '\' and an ASCII letter in replacement
templates for re.sub() were deprecated in Python 3.5, and will now
cause an error.

Removed support of the exclude argument in tarfile.TarFile.add().
It was deprecated in Python 2.7 and 3.2. Use the filter argument instead.

The splitunc() function in the ntpath module was deprecated in
Python 3.1, and has now been removed. Use the splitdrive()
function instead.

collections.namedtuple() no longer supports the verbose parameter
or _source attribute which showed the generated source code for the
named tuple class. This was part of an optimization designed to speed-up
class creation. (Contributed by Jelle Zijlstra with further improvements
by INADA Naoki, Serhiy Storchaka, and Raymond Hettinger in bpo-28638.)

Removed previously deprecated in Python 2.4 classes Plist, Dict and
_InternalDict in the plistlib module. Dict values in the result
of functions readPlist() and
readPlistFromBytes() are now normal dicts. You no longer
can use attribute access to access items of these dictionaries.

The asyncio.windows_utils.socketpair() function has been
removed. Use the socket.socketpair() function instead,
it is available on all platforms since Python 3.5.
asyncio.windows_utils.socketpair was just an alias to
socket.socketpair on Python 3.5 and newer.

asyncio no longer exports the selectors and
_overlapped modules as asyncio.selectors and
asyncio._overlapped. Replace fromasyncioimportselectors with
importselectors.

The fpectl module has been removed. It was never enabled by
default, never worked correctly on x86-64, and it changed the Python
ABI in ways that caused unexpected breakage of C extensions.
(Contributed by Nathaniel J. Smith in bpo-29137.)

The python launcher, (py.exe), can accept 32 & 64 bit specifiers without
having to specify a minor version as well. So py-3-32 and py-3-64
become valid as well as py-3.7-32, also the -m-64 and -m.n-64 forms
are now accepted to force 64 bit python even if 32 bit would have otherwise
been used. If the specified version is not available py.exe will error exit.
(Contributed by Steve Barnes in bpo-30291.)

The launcher can be run as py-0 to produce a list of the installed pythons,
with default marked with an asterisk. Running py-0p will include the paths.
If py is run with a version specifier that cannot be matched it will also print
the short form list of available specifiers.
(Contributed by Steve Barnes in bpo-30362.)

async and await names are now reserved keywords.
Code using these names as identifiers will now raise a SyntaxError.
(Contributed by Jelle Zijlstra in bpo-30406.)

PEP 479 is enabled for all code in Python 3.7, meaning that
StopIteration exceptions raised directly or indirectly in
coroutines and generators are transformed into RuntimeError
exceptions.
(Contributed by Yury Selivanov in bpo-32670.)

Due to an oversight, earlier Python versions erroneously accepted the
following syntax:

f(1forxin[1],)classC(1forxin[1]):pass

Python 3.7 now correctly raises a SyntaxError, as a generator
expression always needs to be directly inside a set of parentheses
and cannot have a comma on either side, and the duplication of the
parentheses can be omitted only on calls.
(Contributed by Serhiy Storchaka in bpo-32012 and bpo-32023.)

When using the -m switch, the initial working directory is now added
to sys.path, rather than an empty string (which dynamically denoted
the current working directory at the time of each import). Any programs that
are checking for the empty string, or otherwise relying on the previous
behaviour, will need to be updated accordingly (e.g. by also checking for
os.getcwd() or os.path.dirname(__main__.__file__), depending on why
the code was checking for the empty string in the first place).

socketserver.ThreadingMixIn.server_close() now waits until all
non-daemon threads complete. Set the new
socketserver.ThreadingMixIn.block_on_close class attribute to
False to get the pre-3.7 behaviour.
(Contributed by Victor Stinner in bpo-31233 and bpo-33540.)

socketserver.ForkingMixIn.server_close() now waits until all
child processes complete. Set the new
socketserver.ForkingMixIn.block_on_close class attribute to False
to get the pre-3.7 behaviour.
(Contributed by Victor Stinner in bpo-31151 and bpo-33540.)

The locale.localeconv() function now temporarily sets the LC_CTYPE
locale to the value of LC_NUMERIC in some cases.
(Contributed by Victor Stinner in bpo-31900.)

The mode argument of os.makedirs() no longer affects the file
permission bits of newly-created intermediate-level directories.
To set their file permission bits you can set the umask before invoking
makedirs().
(Contributed by Serhiy Storchaka in bpo-19930.)

parse_multipart() now accepts the encoding and errors
arguments and returns the same results as
FieldStorage: for non-file fields, the value associated to a key
is a list of strings, not bytes.
(Contributed by Pierre Quentel in bpo-29979.)

repr for BaseException has changed to not include the trailing
comma. Most exceptions are affected by this change.
(Contributed by Serhiy Storchaka in bpo-30399.)

repr for datetime.timedelta has changed to include the keyword
arguments in the output. (Contributed by Utkarsh Upadhyay in bpo-30302.)

Because shutil.rmtree() is now implemented using the os.scandir()
function, the user specified handler onerror is now called with the first
argument os.scandir instead of os.listdir when listing the directory
is failed.

Support for nested sets and set operations in regular expressions as in
Unicode Technical Standard #18 might be added in the future. This would
change the syntax. To facilitate this future change a FutureWarning
will be raised in ambiguous cases for the time being.
That include sets starting with a literal '[' or containing literal
character sequences '--', '&&', '~~', and '||'. To
avoid a warning, escape them with a backslash.
(Contributed by Serhiy Storchaka in bpo-30349.)

The result of splitting a string on a regularexpression
that could match an empty string has been changed. For example
splitting on r'\s*' will now split not only on whitespaces as it
did previously, but also on empty strings before all non-whitespace
characters and just before the end of the string.
The previous behavior can be restored by changing the pattern
to r'\s+'. A FutureWarning was emitted for such patterns since
Python 3.5.

For patterns that match both empty and non-empty strings, the result of
searching for all matches may also be changed in other cases. For example
in the string 'a\n\n', the pattern r'(?m)^\s*?$' will not only
match empty strings at positions 2 and 3, but also the string '\n' at
positions 2–3. To match only blank lines, the pattern should be rewritten
as r'(?m)^[^\S\n]*$'.

re.sub() now replaces empty matches adjacent to a previous
non-empty match. For example re.sub('x*','-','abxd') returns now
'-a-b--d-' instead of '-a-b-d-' (the first minus between ‘b’ and
‘d’ replaces ‘x’, and the second minus replaces an empty string between
‘x’ and ‘d’).

On Windows the default for the close_fds argument of
subprocess.Popen was changed from False to True
when redirecting the standard handles. If you previously depended on handles
being inherited when using subprocess.Popen with standard io
redirection, you will have to pass close_fds=False to preserve the
previous behaviour, or use
STARTUPINFO.lpAttributeList.

The configparser.ConfigParser constructor now uses read_dict()
to process the default values, making its behavior consistent with the
rest of the parser. Non-string keys and values in the defaults
dictionary are now being implicitly converted to strings.
(Contributed by James Tocknell in bpo-23835.)

Several undocumented internal imports were removed.
One example is that os.errno is no longer available; use importerrno
directly instead.
Note that such undocumented internal imports may be removed any time without
notice, even in micro version releases.

The function PySlice_GetIndicesEx() is considered unsafe for
resizable sequences. If the slice indices are not instances of int,
but objects that implement the __index__() method, the sequence can be
resized after passing its length to PySlice_GetIndicesEx(). This
can lead to returning indices out of the length of the sequence. For
avoiding possible problems use new functions PySlice_Unpack() and
PySlice_AdjustIndices().
(Contributed by Serhiy Storchaka in bpo-27867.)

In preparation for potential future changes to the public CPython runtime
initialization API (see PEP 432 for an initial, but somewhat outdated,
draft), CPython’s internal startup
and configuration management logic has been significantly refactored. While
these updates are intended to be entirely transparent to both embedding
applications and users of the regular CPython CLI, they’re being mentioned
here as the refactoring changes the internal order of various operations
during interpreter startup, and hence may uncover previously latent defects,
either in embedding applications, or in CPython itself.
(Initially contributed by Nick Coghlan and Eric Snow as part of
bpo-22257, and further updated by Nick, Eric, and Victor Stinner in a
number of other issues). Some known details affected:

warnings filters added by an embedding application with
PySys_AddWarnOption() should now more consistently take precedence
over the default filters set by the interpreter

Due to changes in the way the default warnings filters are configured,
setting Py_BytesWarningFlag to a value greater than one is no longer
sufficient to both emit BytesWarning messages and have them converted
to exceptions. Instead, the flag must be set (to cause the warnings to be
emitted in the first place), and an explicit error::BytesWarning
warnings filter added to convert them to exceptions.

Due to a change in the way docstrings are handled by the compiler, the
implicit returnNone in a function body consisting solely of a docstring
is now marked as occurring on the same line as the docstring, not on the
function’s header line.

The current exception state has been moved from the frame object to the co-routine.
This simplified the interpreter and fixed a couple of obscure bugs caused by
having swap exception state when entering or exiting a generator.
(Contributed by Mark Shannon in bpo-25612.)

Starting in 3.7.1, Py_Initialize() now consistently reads and respects
all of the same environment settings as Py_Main() (in earlier Python
versions, it respected an ill-defined subset of those environment variables,
while in Python 3.7.0 it didn’t read any of them due to bpo-34247). If
this behavior is unwanted, set Py_IgnoreEnvironmentFlag to 1 before
calling Py_Initialize().

In 3.7.1 the tokenize module now implicitly emits a NEWLINE token
when provided with input that does not have a trailing new line. This behavior
now matches what the C tokenizer does internally.
(Contributed by Ammar Askar in bpo-33899.)

In 3.7.2, venv on Windows no longer copies the original binaries, but
creates redirector scripts named python.exe and pythonw.exe instead.
This resolves a long standing issue where all virtual environments would have
to be upgraded or recreated with each Python update. However, note that this
release will still require recreation of virtual environments in order to get
the new scripts.