reloading the module imported as 'from ... import ...'

Steven D'Aprano steven at REMOVE.THIS.cybersource.com.au
Mon Aug 10 02:21:36 EDT 2009


On Sun, 09 Aug 2009 22:48:31 -0700, AlF wrote:

> Steven D'Aprano wrote:
>> On Sun, 09 Aug 2009 20:43:41 -0700, AlF wrote:
>> 
>>> Hi,
>>>
>>> what is the best way to reload the module imported using 'from ...
>>> import ...'
>> 
>> 
>> Have you tried "from ... import ..." again?
>> 
>> 
> I have not because of an assumption that "import" imports the module
> just once. 

Ah, of course the cached module will still reflect the older version. 
Sorry, I was thinking about solving a different problem:

- In module "main" call "from A import a"
- Some other part of your code modifies A.a
- You want to have the imported a be refreshed with the value of A.a


No, my suggestion won't help in this situation.

Instead, you can:

(1) Delete the module from sys.modules, forcing Python to re-read it from 
disk:

import sys
del sys.modules['A']
from A import a

or

(2) Recognize that Python doesn't specifically support what you're trying 
to do. reload() is a convenience function, and you probably should stick 
to the "import A; A.a" form.


-- 
Steven



More information about the Python-list mailing list