[Cython] Cython is not PEP-420 (Implicit Namespace Packages) compliant

2012-12-14 Thread Alexey V Gorshkov

Hi!

Reporting about Cython PEP-420 (Implicit Namespace Packages) incompliance.

(Sample package setup attached)

(http://www.python.org/dev/peps/pep-0420/)

Next package's tree will not work and will return error

.
./setup.py
./firstlevel
./firstlevel/secondlevel
./firstlevel/secondlevel/mydearpackage
./firstlevel/secondlevel/mydearpackage/__init__.py
./firstlevel/secondlevel/mydearpackage/test.pyx
./firstlevel/secondlevel/mydearpackage/test_h.pxd


= Error Message =
> python3 ./setup.py build_ext --inplace
running build_ext
cythoning firstlevel/secondlevel/mydearpackage/test.pyx to 
firstlevel/secondlevel/mydearpackage/test.c


Error compiling Cython file:

...
cimport firstlevel.secondlevel.mydearpackage.test_h   ^


firstlevel/secondlevel/mydearpackage/test.pyx:1:8: 
'firstlevel.secondlevel.mydearpackage.test_h.pxd' not found

building 'firstlevel.secondlevel.mydearpackage.test' extension
creating build
creating build/temp.linux-i686-3.3
creating build/temp.linux-i686-3.3/firstlevel
creating build/temp.linux-i686-3.3/firstlevel/secondlevel
creating build/temp.linux-i686-3.3/firstlevel/secondlevel/mydearpackage
i486-pc-linux-gnu-gcc -pthread -Wno-unused-result -DNDEBUG -g -fwrapv 
-O3 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python3.3m -c 
firstlevel/secondlevel/mydearpackage/test.c -o 
build/temp.linux-i686-3.3/firstlevel/secondlevel/mydearpackage/test.o
firstlevel/secondlevel/mydearpackage/test.c:1:2: error: #error Do not 
use this file, it is the result of a failed Cython compilation.

error: command 'i486-pc-linux-gnu-gcc' failed with exit status 1
= Error Message End =

Simply adding __init__.py to firstlevel and firstlevel/secondlevel, and 
there will no building error


= Normal Success Message =
>python3 ./setup.py build_ext --inplace
running build_ext
cythoning firstlevel/secondlevel/mydearpackage/test.pyx to 
firstlevel/secondlevel/mydearpackage/test.c

building 'firstlevel.secondlevel.mydearpackage.test' extension
i486-pc-linux-gnu-gcc -pthread -Wno-unused-result -DNDEBUG -g -fwrapv 
-O3 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python3.3m -c 
firstlevel/secondlevel/mydearpackage/test.c -o 
build/temp.linux-i686-3.3/firstlevel/secondlevel/mydearpackage/test.o
i486-pc-linux-gnu-gcc -pthread -shared 
build/temp.linux-i686-3.3/firstlevel/secondlevel/mydearpackage/test.o 
-L/usr/lib -lpython3.3m -o 
/mnt/sda3/home/agu/p/pep420test/firstlevel/secondlevel/mydearpackage/test.cpython-33m.so

= Normal Success Message End =


pep420test-0.0.0.tar.gz
Description: application/gzip
___
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel


Re: [Cython] Cython is not PEP-420 (Implicit Namespace Packages) compliant

2012-12-15 Thread Alexey V Gorshkov

Stefan Behnel wrote:

Alexey V Gorshkov, 15.12.2012 02:17:

Reporting about Cython PEP-420 (Implicit Namespace Packages) incompliance.

(Sample package setup attached)

(http://www.python.org/dev/peps/pep-0420/)

Next package's tree will not work and will return error
[...]

I'm sure it's not - the compile time package resolution code in Cython was
written long before namespace packages were even being thought about. (For
comparison, remember that almost none of the existing CPython versions
supports namespaces packages either, 3.3 is the only exception).

Basically, the runtime import code should be ok, but the package resolution
at compile time, that is used mainly for cimports and for figuring out the
fully qualified module name of compiled modules, doesn't have any support
for packages that don't have an __init__.py.

Would you care to change that? You could try to come up with a patch, we'd
certainly appreciate it.

Stefan

___
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel
Following changes works for me. But I did not made any tests except on 
package I've sent in initial message.


diff --git a/Cython/Utils.py b/Cython/Utils.py
index 5739f38..8f05287 100644
--- a/Cython/Utils.py
+++ b/Cython/Utils.py
@@ -3,7 +3,7 @@
 #anywhere else in particular
 #

-import os, sys, re, codecs
+import os, os.path, sys, re, codecs

 modification_time = os.path.getmtime

@@ -87,7 +87,7 @@ def search_include_directories(dirs, qualified_name, 
suffix, pos,

 else:
 dirs = (find_root_package_dir(file_desc.filename),) + dirs

-dotted_filename = qualified_name
+dotted_filename = qualified_name.replace('.', os.path.sep)
 if suffix:
 dotted_filename += suffix
 if not include:

___
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel