[Distutils] Skipping namespace file?
Phillip J. Eby
pje at telecommunity.com
Thu Jan 4 22:42:59 CET 2007
At 10:47 AM 1/3/2007 -0500, Kurt Schwehr wrote:
>Hi All,
>
>I am working on packaging pydap and am getting some strange behavior.
>
>Here is the install phase...
>
>/sw/bin/python2.4 setup.py install
>--root=/sw/src/fink.build/root-dap-py24-2.2.5.7-1
>--single-version-externally-managed
>
>
>And when it gets to the __init__.py file for dap, it skips it. This
>causes the package to not work.
It should also be installing a .pth file that makes it work, but if your
final installation destination is not a 'site' directory (e.g. Python's
site-packages directory), this will not work.
> Anyone have an idea why it is doing this?
Because system packaging tools like RPM et al do not like it when multiple
packages install the same file. dap.plugins and dap.responses are
"namespace packages", which means that other projects can install modules
in them. Those modules mustn't install an __init__.py, as it would
overwrite the one supplied by pydap. The setuptools solution to this
problem is to never install an __init__.py at all for such packages, when
used with a packaging tool (which is implied by the use of --root).
Instead, setuptools generates a uniquely-named .pth file for each project,
that sets up the namespace package at runtime. Look for a .pth file being
placed in your
/sw/src/fink.build/root-dap-py24-2.2.5.7-1/sw/lib/python2.4/site-packages/
directory. The problem is that if you then install the package somewhere
other than /sw/lib/python2.4/site-packages, or use the -S option to Python
at runtime, it may not work.
>This install proceedure works well with other packages in mac osx/fink. I
>also see the behavior without the --single-version-externally-managed flag.
That's because --root implies --single-version-externally-managed.
More information about the Distutils-SIG
mailing list