astropy: Astropy import conflicts with Spyder User Module Reloader

Something in the import framework fails when importing astropy multiple times in a Spyder Ipython console, using the builtin runfile() with the reload option of its User Module Reloader (UMR) enabled. Minimal way to reproduce the issue on various versions from Spyder 2.3.5.2-3.1.2, Ipython 3.2.2-5.1.0 and Astropy 1.1.1-2.0.5 under SuSe Linux or Ubuntu:

Python 2.7.13 (default, Jan 03 2017, 17:41:54) [GCC]
Type "copyright", "credits" or "license" for more information.

IPython 3.2.2 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
%guiref   -> A brief reference about the graphical user interface.

In [1]: cd ~/routines/python/cosmo
/data/derek/routines/python/cosmo

In [2]: cat ap.py
# Test script for astropy reload bug

import astropy

In [3]: runfile('ap.py')

In [4]: runfile('ap.py')
Reloaded modules: astropy.utils, astropy.extern.configobj.configobj, astropy.config.affiliated, astropy, astropy.extern.plugins.pytest_remotedata, astropy.extern, astropy.utils.introspection, astropy.config, astropy.extern.six, astropy.extern.bundled, astropy.utils.decorators, astropy._compiler, astropy.extern.plugins, astropy.config.configuration, astropy.extern.configobj, astropy.extern.bundled.six, astropy.config.paths, astropy.extern.configobj.validate, astropy.utils._compiler, astropy.tests, astropy.cython_version, astropy.version, astropy.tests.runner, astropy.utils.misc, astropy.logger, astropy.utils.codegen, astropy.utils.exceptions, astropy.extern.plugins.pytest_remotedata.disable_internet

In [5]: runfile('ap.py')
Reloaded modules: astropy.utils, astropy.extern.configobj.configobj, astropy.config.affiliated, astropy, astropy.extern.plugins.pytest_remotedata, astropy.extern, astropy.utils.introspection, astropy.config, astropy.extern.six, astropy.extern.bundled, astropy.utils.decorators, astropy._compiler, astropy.extern.plugins, astropy.config.configuration, astropy.extern.configobj, astropy.extern.bundled.six, astropy.config.paths, astropy.extern.configobj.validate, astropy.utils._compiler, astropy.tests, astropy.cython_version, astropy.version, astropy.tests.runner, astropy.utils.misc, astropy.logger, astropy.utils.codegen, astropy.utils.exceptions, astropy.extern.plugins.pytest_remotedata.disable_internet
Traceback (most recent call last):

  File "<ipython-input-5-9b9f963d0dcf>", line 1, in <module>
    runfile('ap.py')

  File "/usr/lib/python2.7/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 685, in runfile
    execfile(filename, namespace)

  File "/usr/lib/python2.7/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 78, in execfile
    builtins.execfile(filename, *where)

  File "ap.py", line 3, in <module>
    import astropy

  File "/data/derek/lib64/python2.7/site-packages/astropy/__init__.py", line 287, in <module>
    log = _init_log()

  File "/data/derek/lib64/python2.7/site-packages/astropy/logger.py", line 100, in _init_log
    log._set_defaults()

  File "/data/derek/lib64/python2.7/site-packages/astropy/logger.py", line 484, in _set_defaults
    self.disable_warnings_logging()

  File "/data/derek/lib64/python2.7/site-packages/astropy/logger.py", line 253, in disable_warnings_logging
    if warnings.showwarning != self._showwarning:

AttributeError: 'NoneType' object has no attribute 'showwarning'

With slightly more complex scripts the error will be triggered already on the second runfile(). Adding astropy to the list of modules excluded from UMR in the preferences avoids the issue.

A bit more context for those with access can be found in the Python users in Astronomy Facebook group.

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Comments: 21 (21 by maintainers)

Most upvoted comments

For example, a similar issue was reported here: https://github.com/EMS-TU-Ilmenau/fastmat/issues/27

Thank you for investigating! If you feel like this is useful to be documented under http://astropy.readthedocs.io/en/latest/known_issues.html , PR is welcome.

OK, I found that Spyder just did not reload astropy on my Mac because it skips all modules installed under the system path. After disabling that, I could reproduce the crash under MacOS in Python 2.7.14 for astropy 2.0.5. Whereas under both 3.5.5 and 3.6.5 the Spyder reload works for astropy versions from 1.2.1 to 3.0.1. Makes it likely that Python 3 in general is indeed not affected by the bug - my guess is the import _compiler error under Linux was rather caused by the library being compiled under an older OS version, although I don’t understand then why the import succeeded the first two times…

@dhomeier yes of course, sorry I missed that. Regardless, astropy-1.2.x is no longer being supported, so unless you can show that this happens with a more recent version of astropy in a Python3 Spyder environment, I would still argue that no action needs to be taken.