[Cython] Cython is not PEP-420 (Implicit Namespace Packages) compliant
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
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