[Python-checkins] r59122 - peps/trunk/pep-0366.txt

nick.coghlan python-checkins at python.org
Thu Nov 22 15:38:33 CET 2007


Author: nick.coghlan
Date: Thu Nov 22 15:38:32 2007
New Revision: 59122

Modified:
   peps/trunk/pep-0366.txt
Log:
Update PEP 366 to reflect proposed implementation (and point to it on the tracker)

Modified: peps/trunk/pep-0366.txt
==============================================================================
--- peps/trunk/pep-0366.txt	(original)
+++ peps/trunk/pep-0366.txt	Thu Nov 22 15:38:32 2007
@@ -8,7 +8,7 @@
 Content-Type: text/x-rst
 Created: 1-May-2007
 Python-Version: 2.6, 3.0
-Post-History: 1-May-2007, 4-Jul-2007, 7-Jul-2007
+Post-History: 1-May-2007, 4-Jul-2007, 7-Jul-2007, 23-Nov-2007
 
 
 Abstract
@@ -36,22 +36,29 @@
 As with the current ``__name__`` attribute, setting ``__package__`` will
 be the responsibility of the PEP 302 loader used to import a module.
 Loaders which use ``imp.new_module()`` to create the module object will
-have the new attribute set automatically to
-``__name__.rpartition('.')[0]``.
-
-``runpy.run_module`` will also set the new attribute, basing it off the
-``mod_name`` argument, rather than the ``run_name`` argument. This will
-allow relative imports to work correctly from main modules executed with
-the ``-m`` switch.
+have the new attribute set automatically to ``None``. When the import
+system encounters an explicit relative import in a module without
+``__package__`` set (or with it set to ``None``), it will calculate and
+store the correct value (``__name__.rpartition('.')[0]`` for normal
+modules and ``__name__`` for package initialisation modules). If
+``__package__`` has already been set then the import system will use
+it in preference to recalculating the package name from the
+``__name__`` and ``__path__`` attributes.
+
+The ``runpy`` module will explicitly set the new attribute, basing it off
+the name used to locate the module to be executed rather than the name
+used to set the module's ``__name__`` attribute. This will allow relative
+imports to work correctly from main modules executed with the ``-m``
+switch.
 
 When the main module is specified by its filename, then the
-``__package__`` attribute will be set to the empty string. To allow
+``__package__`` attribute will be set to ``None``. To allow
 relative imports when the module is executed directly, boilerplate
 similar to the following would be needed before the first relative
 import statement::
 
-  if __name__ == "__main__" and not __package_name__:
-      __package_name__ = "<expected_pacakage_name>"
+  if __name__ == "__main__" and __package__ is None:
+      __package__ = "expected.package.name"
 
 Note that this boilerplate is sufficient only if the top level package
 is already accessible via ``sys.path``. Additional code that manipulates
@@ -61,7 +68,8 @@
 This approach also has the same disadvantage as the use of absolute
 imports of sibling modules - if the script is moved to a different
 package or subpackage, the boilerplate will need to be updated
-manually.
+manually. It has the advantage that this change need only be made
+once per file, regardless of the number of relative imports.
 
 
 Rationale for Change
@@ -88,9 +96,7 @@
 ``__module_name__`` attribute. It was reverted due to the fact
 that 2.5 was already in beta by that time.
 
-A new patch will be developed for 2.6, and forward ported to
-Py3k via svnmerge.
-
+Patch 1487 [4] is the proposed implementation for this PEP.
 
 Alternative Proposals
 =====================
@@ -103,7 +109,7 @@
 The advantage of the proposal in this PEP is that its only impact on
 normal code is the small amount of time needed to set the extra
 attribute when importing a module. Relative imports themselves should
-be sped up fractionally, as the package name is stored in the module
+be sped up fractionally, as the package name is cached in the module
 globals, rather than having to be worked out again for each relative
 import.
 
@@ -120,6 +126,8 @@
 .. [3] Guido's rejection of PEP 3122
    (http://mail.python.org/pipermail/python-3000/2007-April/006793.html)
 
+.. [4] PEP 366 implementation patch
+   (http://bugs.python.org/issue1487)
 
 Copyright
 =========


More information about the Python-checkins mailing list