
I think that something like:
<heapq.py> heapq python code...
try: from _heapq import * # or list the names explicitly except ImportError: pass </heapq.py>
can be made to work.
I like this too.
The tricky part is more in test_heapq, but I think it can be rewritten in some form like:
import heapq # import likely the C code test(heapq) # or heapq could be a global heapq = test.support.get_pure_python_version(heapq) test(heapq)
or some variation.
Note that you could force the _heapq import to fail by putting an explicit None in sys.modules, like so: import heapq ...test the C impl... sys.modules['_heapq'] = None reload(heapq) # Now 'from _heapq import ...' will fail ...test the Python impl... # Restore the default situation del sys.modules['_heapq'] reload(heapq) I wish cStringIO and cPickle would go away, but unfortunately the Python versions have features that the C code don't have. Hopefully the use of new-style classes can avoid this issue for new module pairs. --Guido van Rossum (home page: http://www.python.org/~guido/)