On Fri, Feb 20, 2009 at 1:45 PM, Brett Cannon <br...@python.org> wrote:
> But there is another issue with this: the pure Python code will never call
> the extension code because the globals will be bound to _pypickle and not
> _pickle. So if you have something like::
>
>   # _pypickle
>   def A(): return _B()
>   def _B(): return -13
>
>   # _pickle
>   def _B(): return 42
>
>   # pickle
>   from _pypickle import *
>   try: from _pickle import *
>   except ImportError: pass
>
> If you import pickle and call pickle.A() you will get -13 which is not what
> you are after.

Maybe I've missed this and someone else already suggested it, but
couldn't we provide a (probably C-coded) function
``replace_globals(module, globals)`` that would, say, replace the
globals in _pypickle with the globals in pickle? Then you could write
something like::

    from _pypickle import *
    try:
        from _pickle import *
        module = __import__('_pickle')
    except ImportError:
        module = __import__('_pypickle')
    replace_globals(module, globals())

Steve
-- 
I'm not *in*-sane. Indeed, I am so far *out* of sane that you appear a
tiny blip on the distant coast of sanity.
        --- Bucky Katt, Get Fuzzy
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to