[Python-checkins] r45403 - in sandbox/trunk/setuptools: pkg_resources.py pkg_resources.txt setuptools.txt setuptools/command/build_py.py
phillip.eby
python-checkins at python.org
Fri Apr 14 21:13:26 CEST 2006
Author: phillip.eby
Date: Fri Apr 14 21:13:24 2006
New Revision: 45403
Modified:
sandbox/trunk/setuptools/pkg_resources.py
sandbox/trunk/setuptools/pkg_resources.txt
sandbox/trunk/setuptools/setuptools.txt
sandbox/trunk/setuptools/setuptools/command/build_py.py
Log:
Don't eagerly import namespace packages. This was the big reason for
branching to 0.7 now, as I wanted this wart gone before anything went
into Python 2.5. But it's gone now, yay!
Modified: sandbox/trunk/setuptools/pkg_resources.py
==============================================================================
--- sandbox/trunk/setuptools/pkg_resources.py (original)
+++ sandbox/trunk/setuptools/pkg_resources.py Fri Apr 14 21:13:24 2006
@@ -2045,8 +2045,8 @@
self.insert_on(path)
if path is sys.path:
fixup_namespace_packages(self.location)
- map(declare_namespace, self._get_metadata('namespace_packages.txt'))
-
+ for pkg in self._get_metadata('namespace_packages.txt'):
+ if pkg in sys.modules: declare_namespace(pkg)
def egg_name(self):
"""Return what this distribution's standard .egg filename should be"""
Modified: sandbox/trunk/setuptools/pkg_resources.txt
==============================================================================
--- sandbox/trunk/setuptools/pkg_resources.txt (original)
+++ sandbox/trunk/setuptools/pkg_resources.txt Fri Apr 14 21:13:24 2006
@@ -121,13 +121,16 @@
A namespace package is a package that only contains other packages and modules,
with no direct contents of its own. Such packages can be split across
-multiple, separately-packaged distributions. Normally, you do not need to use
-the namespace package APIs directly; instead you should supply the
-``namespace_packages`` argument to ``setup()`` in your project's ``setup.py``.
-See the `setuptools documentation on namespace packages`_ for more information.
-
-However, if for some reason you need to manipulate namespace packages or
-directly alter ``sys.path`` at runtime, you may find these APIs useful:
+multiple, separately-packaged distributions. They are normally used to split
+up large packages produced by a single organization, such as in the ``zope``
+namespace package for Zope Corporation packages, and the ``peak`` namespace
+package for the Python Enterprise Application Kit.
+
+To create a namespace package, you list it in the ``namespace_packages``
+argument to ``setup()``, in your project's ``setup.py``. (See the `setuptools
+documentation on namespace packages`_ for more information on this.) Also,
+you must add a ``declare_namespace()`` call in the package's ``__init__.py``
+file(s):
``declare_namespace(name)``
Declare that the dotted package name `name` is a "namespace package" whose
@@ -140,6 +143,9 @@
is invoked, it checks for the presence of namespace packages and updates
their ``__path__`` contents accordingly.
+Applications that manipulate namespace packages or directly alter ``sys.path``
+at runtime may also need to use this API function:
+
``fixup_namespace_packages(path_item)``
Declare that `path_item` is a newly added item on ``sys.path`` that may
need to be used to update existing namespace packages. Ordinarily, this is
@@ -1652,5 +1658,10 @@
Release Notes/Change History
----------------------------
-XXX Starting fresh for 0.7
+0.7a1
+ * Namespace packages are now imported lazily. That is, the mere declaration
+ of a namespace package in an egg on ``sys.path`` no longer causes it to be
+ imported when ``pkg_resources`` is imported. Note that this means that all
+ of a namespace package's ``__init__.py`` files must include a
+ ``declare_namespace()`` call.
Modified: sandbox/trunk/setuptools/setuptools.txt
==============================================================================
--- sandbox/trunk/setuptools/setuptools.txt (original)
+++ sandbox/trunk/setuptools/setuptools.txt Fri Apr 14 21:13:24 2006
@@ -2476,7 +2476,11 @@
Release Notes/Change History
----------------------------
-XXX starting fresh for 0.7
+0.7a1
+ * Namespace packages' ``__init__.py`` files MUST use ``declare_namespace()``
+ in order to ensure that they will be handled properly at runtime. (In 0.6,
+ it was possible to get away without doing this, but only at the cost of
+ forcing namespace packages to be imported early, which 0.7 does not do.)
Mailing list
Modified: sandbox/trunk/setuptools/setuptools/command/build_py.py
==============================================================================
--- sandbox/trunk/setuptools/setuptools/command/build_py.py (original)
+++ sandbox/trunk/setuptools/setuptools/command/build_py.py Fri Apr 14 21:13:24 2006
@@ -142,12 +142,12 @@
f = open(init_py,'rU')
if 'declare_namespace' not in f.read():
- from distutils import log
- log.warn(
- "WARNING: %s is a namespace package, but its __init__.py does\n"
- "not declare_namespace(); setuptools 0.7 will REQUIRE this!\n"
- '(See the setuptools manual under "Namespace Packages" for '
- "details.)\n", package
+ from distutils.errors import DistutilsError
+ raise DistutilsError(
+ "Namespace package problem: %s is a namespace package, but its\n"
+ "__init__.py does not call declare_namespace()! Please fix it.\n"
+ '(See the setuptools manual under "Namespace Packages" for '
+ "details.)\n" % (package,)
)
f.close()
return init_py
More information about the Python-checkins
mailing list