Question

I am pretty much new to Python and cannot quite understand the scenario below.

Firstly, there exists no module so the error below is understandable.

>>> import module1

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import module1
ImportError: No module named module1

Then I created the module and the sentences below worked perfectly.

module1.py

def func():
    print 'this is a test module'

Python IDLE

>>> import module1
>>> module1.func()
this is a test module

On the execution of the first statement, module1.pyc file was created. Then I added another function to module1.py.

module1.py

def func():
    print 'this is a test module'

def func1():
    print 'this is func1'

and tried to import this new file and run the statements below. But error was thrown as follows.

Python IDLE

>>> import module1
>>> module1.func1()

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    module1.func1()
AttributeError: 'module' object has no attribute 'func1'

I then deleted module1.py from the folder and then re-saved module1.py (with no contents changed). Again I executed the above statements in the IDLE prompt and the same error was thrown. And this time when the import module1 statement was executed, module1.pyc file wasn't created unlike the previous time.

However, on restarting the IDLE everything works perfectly but why doesn't the IDE recompile the module1.pyc everytime import statement is executed(without restarting or opening another IDLE window) or could anyone explain what exactly happens in the memory when import statement is executed everytime.

Thanks!!

Was it helpful?

Solution

If you import a module that has already been imported, it will not "re-import" and you will just get a reference to the original module.

You should use reload to re-import the module if it has been already imported:

reload(module1)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top