Dear Robert,

Zitat von Robert Bradshaw <[email protected]>:
> Hmm... could you point me to that bit of documentation? I think it's
> wrong (or at least not implemented as explained), we do Extension
> ("package.module",...) all the time in sage and that seems to mix
> well with pickling.

Admittedly it is not Cython-documentation, but Python:
At http://docs.python.org/distutils/setupscript.html, they say:

---------------------
If you have a number of extensions all in the same package (or all under the
same base package), use the ext_package keyword argument to setup(). For
example,

setup(...,
      ext_package='pkg',
      ext_modules=[Extension('foo', ['foo.c']),
                   Extension('subpkg.bar', ['bar.c'])],
     )

will compile foo.c to the extension pkg.foo, and bar.c to pkg.subpkg.bar.
---------------------

Anyway. As I mentioned in my original post, I also tried it *without*
ext_package but with explicit package names.

Five minutes ago I found that (as a leftover of a previous built) I had mtx.so
not only in the pGroupCohomology folder, but also one level up. Perhaps this
was confusing for Sage.

A propos confusing: It is still not clear to me what the role of the
setup-options "name", "packages", and "ext_package". In order to learn (one of
the main advantages of open source, imho), I was looking at the setup.py of the
optional pil-package for sage. They have
        name="PIL",
        package_dir={"": "PIL"},
        packages=[""],
        ext_modules = [Extension("_imaging", ["_imaging.c"])], # dummy
and apparently it results in _imaging.so in the folder PIL.

If I do, analogously,
  name='pGroupCohomology',
  packages=[""],
  package_dir={"":"CohoSrc"},
    Extension("mtx",
then my (dummy) __init__.py is copied at the top level (folder
SAGE_LOCAL/lib/python2.5/site-packages/), and in the same folder mtx.so shows
up -- I hope this did not destroy something important. Anyway, I wonder why the
PIL package works.

If I do
  name='pGroupCohomology'
  packages=[""],
  package_dir={"":"CohoSrc"},
    Extension("pGroupCohomology.mtx",
then still my __init__.py runs amok. mtx.so seems in the correct place, but of
course I can't import mtx if there is no __init__.py in the package folder.

If I do
  name='pGroupCohomology'
  packages=["pGroupCohomology"],
  package_dir={"pGroupCohomology":"CohoSrc"},
  ext_package="pGroupCohomology",
    Extension("mtx",
then everything seems in the right place, in accordance with the above-mentioned
documentation. I can import mtx
 sage: from pGroupCohomology.mtx import MTX
and construct some instance M, but again
 sage: M.__class__
 <type 'mtx.MTX'>
and
 sage: save(M,'Test')
 ---------------------------------------------------------------------------
 PicklingError                             Traceback (most recent call last)
 ...
 PicklingError: Can't pickle mtx.MTX_unpickle_class: import of module mtx failed

Note that the error is slightly different from my original post. Apparently, at
that time, I had a copy of mtx.so in the site-packages top folder, so that the
import of mtx worked, but was of course not the same as
pGroupCohomology/mtx.so.

Conclusion:
- I have a folder pGroupCohomology in the site-packages,
- it contains __init__.py, hence, gives rise to a package
- it contains the module mtx.so
- but mtx.so believes that it is not contained in a package.
Why?

Cheers,
  Simon


----------------------------------------------------------------
This mail was sent through http://webmail.uni-jena.de
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to