New submission from Owen Pembery <opemb...@gmail.com>:

This may be a bug, or may be a hole in my understanding of how importlib.reload 
works.

In short, when running importlib.reload in a script, it seems that a module is 
not reloaded before it is used, whereas running the same script a line at a 
time in interactive mode seems to reload the script.

Relevant scripts are in the github repository: 
https://github.com/orpembery/python-reload-bug.

I find the bug using python 3.5.2 on Ubuntu 16.04.

The expected output from running

python3 master.py

is:
1
2

However, I instead find that the output is:
1
1

If I paste the commands in master.py into the interpreter one at a time, I get 
the expected behaviour:

Python 3.5.2 (default, Nov 12 2018, 13:43:14) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from shutil import copy
>>> 
>>> from importlib import reload
>>> # Move a file
... copy('fn_1.py','fn.py')
'fn.py'
>>> # Import it
... import fn
>>> # Run it
... fn.fn()
1
>>> # Move a different file to the same location.
... copy('fn_2.py','fn.py')
'fn.py'
>>> # Reload it
... reload(fn)
<module 'fn' from '/home/owen/code/python-reload-bug/fn.py'>
>>> # Run it
... fn.fn()
2


However, if the commands in master.py are pasted in all at one (i.e., with a 
single CTRL-V keystroke), I obtain the unexpected behaviour:
Python 3.5.2 (default, Nov 12 2018, 13:43:14) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from shutil import copy
>>> from importlib import reload
>>> 
>>> # Move a file
... copy('fn_1.py','fn.py')
'fn.py'
>>> 
>>> # Import it
... import fn
>>> 
>>> # Run it
... fn.fn()
1
>>> 
>>> # Move a different file to the same location.
... copy('fn_2.py','fn.py')
'fn.py'
>>> 
>>> # Reload it
... reload(fn)
<module 'fn' from '/home/owen/code/python-reload-bug/fn.py'>
>>> 
>>> # Run it
... fn.fn()
1


Possible causes:
I'm very far from an expert, but it seems to be something to do with caching; 
running

python3 -B master.py

gives the expected behaviour.

----------
components: Library (Lib)
messages: 330631
nosy: brett.cannon, orpembery
priority: normal
severity: normal
status: open
title: Importlib.reload has different behaviour in script and interactive mode
versions: Python 3.5

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue35343>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to