Search code examples
pycharm

How do I reload a module after changing it?


Python Console with Python 3.4.2

I defined a function in a module which runs correctly in Python Console in PyCharm Community Edition 4.5.4:
ReloadTest.py:

def reloadtest(x):
    print("Version A: {}".format(x))

Python Console:

Python 3.4.2 (v3.4.2:ab2c023a9432, Oct  6 2014, 22:15:05) [MSC v.1600 32 bit (Intel)] on win32
>>> from ReloadTest import reloadtest
>>> reloadtest(1)
Version A: 1   

After I modified the function to "Version B", PyCharm can't find the change, and importlib.reload(ReloadTest) gives me error.
I must reload the Python Console or restart PyCharm every time I modify a module. What did I do wrong? What is the best way to handle this?

ReloadTest.py:

def reloadtest(x):
    print("Version B: {}".format(x))

Python Console:

>>> reloadtest(1)
Version A: 1
>>> from ReloadTest import reloadtest
>>> reloadtest(1)
Version A: 1
>>> import importlib
>>> importlib.reload(ReloadTest)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'ReloadTest' is not defined
>>> from ReloadTest import reloadtest
>>> reloadtest(1)
Version A: 1
>>> import ReloadTest
>>> reloadtest(1)
Version A: 1

Solution

  • Get it to work!
    Instead of from Module import function, I should import the whole module import Module, then call the function by Module.function(). This is because

    from ReloadTest import reloadtest
    

    and

    importlib.reload(ReloadTest)
    

    can't go together.

    >>> import ReloadTest
    >>> ReloadTest.reloadtest(1)
    Version A: 1
    

    After making changes:

    >>> importlib.reload(ReloadTest)
    <module 'ReloadTest' from 'C:\\...\\ReloadTest.py'>
    >>> ReloadTest.reloadtest(2)
    Version B: 2