[Cython] Cython 0.17 beta 1 released

Robert Bradshaw robertwb at gmail.com
Wed Jul 25 22:58:37 CEST 2012


Thanks for the report!

On Wed, Jul 25, 2012 at 12:02 PM, Yaroslav Halchenko
<lists at onerussian.com> wrote:
> So I wonder, wouldn't it be reasonable (i.e. more robust) in cython_inline  to
> instantiate first build_extension and seek full name for the resultant
> extension from it?  That should eliminate any possibility to get different
> names.
>
> e.g. smth like:
>
>
> $> quilt diff
> --- a/Cython/Build/Inline.py
> +++ b/Cython/Build/Inline.py
> @@ -139,8 +139,15 @@ def cython_inline(code,
>      key = orig_code, arg_sigs, sys.version_info, sys.executable, Cython.__version__
>      module_name = "_cython_inline_" + hashlib.md5(str(key).encode('utf-8')).hexdigest()
>
> -    so_ext = [ ext for ext,_,mod_type in imp.get_suffixes() if mod_type == imp.C_EXTENSION ][0]
> -    module_path = os.path.join(lib_dir, module_name+so_ext)
> +    dist = Distribution()
> +    # Ensure the build respects distutils configuration by parsing
> +    # the configuration files
> +    config_files = dist.find_config_files()
> +    dist.parse_config_files(config_files)
> +    build_extension = build_ext(dist)
> +    build_extension.finalize_options()
> +
> +    module_path = os.path.join(lib_dir, build_extension.get_ext_filename(module_name))
>
>      if not os.path.exists(lib_dir):
>          os.makedirs(lib_dir)
> @@ -178,13 +185,6 @@ def __invoke(%(params)s):
>              sources = [pyx_file],
>              include_dirs = c_include_dirs,
>              extra_compile_args = cflags)
> -        dist = Distribution()
> -        # Ensure the build respects distutils configuration by parsing
> -        # the configuration files
> -        config_files = dist.find_config_files()
> -        dist.parse_config_files(config_files)
> -        build_extension = build_ext(dist)
> -        build_extension.finalize_options()
>          build_extension.extensions = cythonize([extension], ctx=ctx, quiet=quiet)
>          build_extension.build_temp = os.path.dirname(pyx_file)
>          build_extension.build_lib  = lib_dir

One essential feature of cython.inline(...) is that if the code has
already been compiled (and loaded) it should return very fast. This
would seem to add significant overhead. Is the extension relatively
consistant? Perhaps it could be cached at module load time.

- Robert


More information about the cython-devel mailing list