SOLVED How can I reload a Python module on the *first* attempt?
-
The post above gives a very helpful suggestion of how to reload modules while working on a script, but I have a question.
Question
I can only get modules to reload on the second time I run a script.
For example, here's a project setup:
myScript ├── __init__.py ├── myScript.py └── helpers ├── __init__.py └── myScriptHelper.pymyScriptHelper.pylooks like this:def testReload(): print("hello, I'm reloaded")And
myScript.pylooks like this:import importlib import helpers from helpers.myScriptHelper import * print("hello from myScript") importlib.reload(helpers.myScriptHelper) testReload()So, I would expect to see "hello, I'm reloaded" in the Output Window when I run
myScript.py. However, I'm finding that I only end up seeing updates tomyScriptHelper.pyon the second time I runmyScript.pyafter making any changes.Example
I run
myScript.py. In the Output, I see this:hello from myScript hello, I'm reloadedNext, I change
myScriptHelper.pyto this:def testReload(): print("hello, I'm REALLY reloaded")However, when I run
myScript.pyagain, I see the same output again:hello from myScript hello, I'm reloaded hello from myScript hello, I'm reloadedIt's only when I run
myScript.pyagain a second time that I see the output of the updated module:hello from myScript hello, I'm reloaded hello from myScript hello, I'm reloaded hello from myScript hello, I'm REALLY reloaded
Have I missed a step, or is it expected that it should take two runs of a script for
importlib.reload()to take effect?Thanks for any help here! I know this is a tiny question, but I'm trying to learn how to do the little things right so I can be more effective overall. :)
-
Ahhh, that makes sense now.
That’s a good tip about
__init.py__as well.Thank you so much for your help, Gustavo!
-
hello @ArrowType,
to update a module you need to reload it before you import stuff from it:
import importlib import helpers.myScriptHelper importlib.reload(helpers.myScriptHelper) from helpers.myScriptHelper import * print("hello from myScript") testReload()also, unless you wish to run some code when the module is imported, you don’t really need to include empty
__init__.pyfiles to indicate namespace packages in Python 3.hope this helps! cheers