[Pyrex] cimport across directories
Lenard Lindstrom
len-l at telus.net
Thu Jun 15 23:22:26 UTC 2006
On 16 Jun 2006 at 0:06, Martin Albrecht wrote:
> Hi everyone,
>
> my name is Martin Albrecht and I use Pyrex in the SAGE [1] project by William
> Stein.
>
> I believe to have found and fixed a bug in Pyrex which prevented cimporting
> modules across directory borders. This issue has been discussed on this list
> a while back [2]: The problem seems to boil down to: either Pyrex cannot find
> the pxd file or python cannot find the module at run time. Consider e.g. you
> have some module in the directory bar called foo. You can (a) either cimport
> foo and add bar to the pyrexc include path or (b) you can cimport bar.foo and
> add the top level directory to the include path. In case (a) pyrexc finds the
> file but python gets confused with a module foo. In case (b) pyrexc
> complaints not to find the file foo.bar.pxd.
>
> I fixed the later one which was due to the fact that the dots where not
> replaced by directory delimiters so search_include_directories() can handle
> the filename.
>
> --- home/martin/pyrex-0.9.4.1/Pyrex/Compiler/Main.py 2006-04-15
> 09:24:02.000000000 +0200
> +++ opt/sage/local/lib/python2.4/site-packages/Pyrex/Compiler/Main.py
> 2006-06-15 21:25:20.000000000 +0200
> @@ -91,7 +91,10 @@
> def find_pxd_file(self, module_name, pos):
> # Search include directories for the .pxd file
> # corresponding to the given (full) module name.
> - pxd_filename = "%s.pxd" % module_name
> + if "." in module_name:
> + pxd_filename = "%s.pxd" % module_name.replace(".","/")
> + else:
> + pxd_filename = "%s.pxd" % module_name
> return self.search_include_directories(pxd_filename, pos)
>
> def find_include_file(self, filename, pos):
>
The idea might be sound but the implementation is not portable. It
would be better to do a:
"%s.pxd" % os.path.join(*module_name.split('.'))
Lenard Lindstrom
<len-l at telus.net>
More information about the Pyrex
mailing list