On Mon, Jun 09, 2014 at 01:43:53PM +0200, Sergio Pascual wrote:
So, do you mean changing things like:
from ...extern.six.moves.http_client import HTTPSConnection
to
try:
from six.moves.http_client import HTTPSConnection
except ImportError:
from ...extern.six.moves.http_client import HTTPSConnection
everywhere in the code? Surely upstream is not going to to accept it.
Some upstreams do accept this.
What they could accept is a mechanism in extern.six to load the
system package
when is available and the bundled package when it is not. The same for the
other packages (ply, pytest, etc). But that's what I'm trying to avoid by
linking.
This can be done as well. Take a look at how kitchen.pycompat* is coded for
instance:
http://bzr.fedorahosted.org/bzr/kitchen/devel/annotate/head:/kitchen/pyco...
Note that import * isn't guaranteed to get all of the publically available
API because __all__ might not be complete in a given module. If you run
into that you have to do something like:
try:
from module import *
from module import not_in__all__
except ImportError:
from _module import *
from _module import not_in__all__
Of course, a primary question is why are these modules bundled?
Is it only out of convenience (for the users/developers)?
Are there strict dependencies on specific versions of these modules?
It's a matter of convenience. The only hard requirement of astropy is numpy.
Why are these modules considered part of the astropy API? That seems like
bad practice. It may be that the packages which use astropy.extern.* should
also be taught to use
try: from system module except ImportError: from bundled location
-Toshio