[PEP 451] Minor edits in response to feedback.
Also removed spec_from_module(), which isn't very useful outside the import system.
This commit is contained in:
parent
29e97673eb
commit
24c5df69c6
41
pep-0451.txt
41
pep-0451.txt
|
@ -9,7 +9,7 @@ Type: Standards Track
|
||||||
Content-Type: text/x-rst
|
Content-Type: text/x-rst
|
||||||
Created: 8-Aug-2013
|
Created: 8-Aug-2013
|
||||||
Python-Version: 3.4
|
Python-Version: 3.4
|
||||||
Post-History: 8-Aug-2013, 28-Aug-2013, 18-Sep-2013
|
Post-History: 8-Aug-2013, 28-Aug-2013, 18-Sep-2013, 24-Sep-2013
|
||||||
Resolution:
|
Resolution:
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ it can load, as well as about data from sources associated with such a
|
||||||
module.
|
module.
|
||||||
|
|
||||||
Right now loaders (via load_module()) are responsible for certain
|
Right now loaders (via load_module()) are responsible for certain
|
||||||
boilerplate import-related operations. These are:
|
boilerplate, import-related operations. These are:
|
||||||
|
|
||||||
1. perform some (module-related) validation;
|
1. perform some (module-related) validation;
|
||||||
2. create the module object;
|
2. create the module object;
|
||||||
|
@ -76,7 +76,7 @@ origin
|
||||||
This is a new term and concept. The idea of it exists subtly in the
|
This is a new term and concept. The idea of it exists subtly in the
|
||||||
import system already, but this proposal makes the concept explicit.
|
import system already, but this proposal makes the concept explicit.
|
||||||
|
|
||||||
"origin" is the import context means the system (or resource within a
|
"origin" in an import context means the system (or resource within a
|
||||||
system) from which a module originates. For the purposes of this
|
system) from which a module originates. For the purposes of this
|
||||||
proposal, "origin" is also a string which identifies such a resource or
|
proposal, "origin" is also a string which identifies such a resource or
|
||||||
system. "origin" is applicable to all modules.
|
system. "origin" is applicable to all modules.
|
||||||
|
@ -133,7 +133,8 @@ PEP 3147. For this proposal, the relevant API for module caching is the
|
||||||
``__cache__`` attribute of modules and the cache_from_source() function
|
``__cache__`` attribute of modules and the cache_from_source() function
|
||||||
in importlib.util. Loaders are responsible for putting modules into the
|
in importlib.util. Loaders are responsible for putting modules into the
|
||||||
cache (and loading out of the cache). Currently the cache is only used
|
cache (and loading out of the cache). Currently the cache is only used
|
||||||
for compiled source modules. However, this proposal explicitly allows
|
for compiled source modules. However, loaders may take advantage of
|
||||||
|
the module cache for other kinds of modules.
|
||||||
|
|
||||||
package
|
package
|
||||||
-------
|
-------
|
||||||
|
@ -141,7 +142,7 @@ package
|
||||||
The concept does not change, nor does the term. However, the
|
The concept does not change, nor does the term. However, the
|
||||||
distinction between modules and packages is mostly superficial.
|
distinction between modules and packages is mostly superficial.
|
||||||
Packages *are* modules. They simply have a ``__path__`` attribute and
|
Packages *are* modules. They simply have a ``__path__`` attribute and
|
||||||
import may add attributes bound to submodules. The typical perceived
|
import may add attributes bound to submodules. The typically perceived
|
||||||
difference is a source of confusion. This proposal explicitly
|
difference is a source of confusion. This proposal explicitly
|
||||||
de-emphasizes the distinction between packages and modules where it
|
de-emphasizes the distinction between packages and modules where it
|
||||||
makes sense to do so.
|
makes sense to do so.
|
||||||
|
@ -273,12 +274,6 @@ finders. See the `Factory Functions`_ section below for more detail.
|
||||||
* from_loader(name, loader, \*, origin=None, is_package=None) - build
|
* from_loader(name, loader, \*, origin=None, is_package=None) - build
|
||||||
a spec with missing information filled in by using loader APIs.
|
a spec with missing information filled in by using loader APIs.
|
||||||
|
|
||||||
This factory function is useful for some backward-compatibility
|
|
||||||
situations:
|
|
||||||
|
|
||||||
* spec_from_module(module, loader=None) - build a spec based on the
|
|
||||||
import-related attributes of an existing module.
|
|
||||||
|
|
||||||
Other API Additions
|
Other API Additions
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
@ -332,10 +327,12 @@ Other Changes
|
||||||
* The import system implementation in importlib will be changed to make
|
* The import system implementation in importlib will be changed to make
|
||||||
use of ModuleSpec.
|
use of ModuleSpec.
|
||||||
* importlib.reload() will make use of ModuleSpec.
|
* importlib.reload() will make use of ModuleSpec.
|
||||||
* Import-related module attributes (other than ``__spec__``) will no
|
* A module's import-related attributes (other than ``__spec__``) will no
|
||||||
longer be used directly by the import system.
|
longer be used directly by the import system during that module's
|
||||||
|
import. However, this does not impact use of those attributes
|
||||||
|
(e.g. ``__path__``) when loading other modules (e.g. submodules).
|
||||||
* Import-related attributes should no longer be added to modules
|
* Import-related attributes should no longer be added to modules
|
||||||
directly.
|
directly, except by the import system.
|
||||||
* The module type's ``__repr__()`` will be a thin wrapper around a pure
|
* The module type's ``__repr__()`` will be a thin wrapper around a pure
|
||||||
Python implementation which will leverage ModuleSpec.
|
Python implementation which will leverage ModuleSpec.
|
||||||
* The spec for the ``__main__`` module will reflect the appropriate
|
* The spec for the ``__main__`` module will reflect the appropriate
|
||||||
|
@ -459,8 +456,11 @@ functionality::
|
||||||
sys.modues[spec.name] = module
|
sys.modues[spec.name] = module
|
||||||
try:
|
try:
|
||||||
spec.loader.exec_module(module)
|
spec.loader.exec_module(module)
|
||||||
except Exception:
|
except BaseException:
|
||||||
|
try:
|
||||||
del sys.modules[spec.name]
|
del sys.modules[spec.name]
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
raise
|
raise
|
||||||
return sys.modules[spec.name]
|
return sys.modules[spec.name]
|
||||||
|
|
||||||
|
@ -599,17 +599,6 @@ related module attributes. See the table in `Attributes`_.
|
||||||
Omitted Attributes and Methods
|
Omitted Attributes and Methods
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
The following ModuleSpec methods are not part of the public API since
|
|
||||||
it is easy to use them incorrectly and only the import system really
|
|
||||||
needs them (i.e. they would be an attractive nuisance).
|
|
||||||
|
|
||||||
* _create() - provide a new module to use for loading.
|
|
||||||
* _exec(module) - execute the spec into a module namespace.
|
|
||||||
* _load() - prepare a module and execute it in a protected way.
|
|
||||||
* _reload(module) - re-execute a module in a protected way.
|
|
||||||
|
|
||||||
Here are other omissions:
|
|
||||||
|
|
||||||
There is no "PathModuleSpec" subclass of ModuleSpec that separates out
|
There is no "PathModuleSpec" subclass of ModuleSpec that separates out
|
||||||
has_location, cached, and submodule_search_locations. While that might
|
has_location, cached, and submodule_search_locations. While that might
|
||||||
make the separation cleaner, module objects don't have that distinction.
|
make the separation cleaner, module objects don't have that distinction.
|
||||||
|
|
Loading…
Reference in New Issue