changeset: 89653:b626f4978a28 user: Brett Cannon date: Fri Mar 14 09:46:28 2014 -0400 files: Doc/whatsnew/3.4.rst description: Issue #20884: whatsnew: Frozen modules don't set __file__ anymore. diff -r 73c2a70e4b35 -r b626f4978a28 Doc/whatsnew/3.4.rst --- a/Doc/whatsnew/3.4.rst Fri Mar 14 13:42:19 2014 +0000 +++ b/Doc/whatsnew/3.4.rst Fri Mar 14 09:46:28 2014 -0400 @@ -2275,6 +2275,14 @@ to determine if a module is a package or not is to use``hasattr(module, '__path__')`` (:issue:`18065`). +* Frozen modules no longer define a ``__file__`` attribute. It's semantically + incorrect for frozen modules to set the attribute as they are not loaded from + any explicit location. If you must know that a module comes from frozen code + then you can see if the module's ``__spec__.location`` is set to ``'frozen'``, + check if the loader is a subclass of + :class:`importlib.machinery.FrozenImporter`, + or if Python 2 compatibility is necessary you can use :func:`imp.is_frozen`. + * :func:`py_compile.compile` now raises :exc:`FileExistsError` if the file path it would write to is a symlink or a non-regular file. This is to act as a warning that import will overwrite those files with a regular file regardless