[Distutils] Setuptools: omit namespace package directories?
Phillip J. Eby
pje at telecommunity.com
Fri Feb 9 18:08:24 CET 2007
At 09:15 AM 2/9/2007 -0500, Jim Fulton wrote:
>The question is whether a less annoying layout can be made importable.
Well, what's "annoying" is relative. I personally find the flat layout
"annoying" because it's not WYSIWYG. :)
But the answer to your question is "yes". Anything can be made importable,
with sufficient effort.
When a project that includes a namespace package is installed using
--single-version-externally-managed, a special .pth file for that project
is created that sets up empty modules in sys.modules with appropriate
__path__ values.
A similar technique could be applied in setup.py develop, if a project uses
package_dirs. I'm just a bit reluctant to try to shoehorn something like
that into 0.6.
But, if you'd like to experiment with creating a patch (or a subclass of
"develop") that would support creating and uninstalling this .pth file, see
the 'install_namespaces()' method of the install_egg_info command in
setuptools. The code you'd need for this would actually be *simpler* in
some ways, because that code is trying to work relative to whatever
directory it's installed in, but for what "develop" needs you could just
bake the absolute paths right in.
The uninstall mode of "develop" could just remove the .pth file. One
possible complication, however, is that if someone didn't uninstall but
left the .pth file around, it would produce strange results (if e.g., they
installed an egg for the project without uninstalling the develop
mode). So, the code in the .pth should probably check that the original
project is still on sys.path before creating dummy modules.
More information about the Distutils-SIG
mailing list