Question: I am in the process of coding an app which has to get the metadata (author,version..etc) out of several modules (.py files) and display them. The user selects a script and the script is executed. (New scripts can be added and old ones be taken of from the target folder just like a plugin system).

Firstly I import a script and I take out the metadata, then I go for the next.
But I want to de-import all the other modules except for the one that the user has selected.

How can I implement this?

I tried these

```
1. del module
2. del sys.modules['module']

```

The latter did not work. I tried #python and got the answer that it was not good to de-import modules, but I want to know a clean way of implementing this. Any ideas/suggestions would help.

Answer: 
I recently found this post <https://www.geeksforgeeks.org/reloading-modules-python/> and so for Python 3.4 or later use

```
import importlib
importlib.reload(module) 

```
I know this post has been out of date but I just encountered this issue and was struggling against it for the past few days. Now I came with a conclusion that can perfectly solve this issue. Please see the sample code below:

```
try:
    theMod = sys.modules['ModNeedToBeDel']   
except:
    theMod = None
if theMod:
    del sys.modules['ModNeedToBeDel']

#The extra try/except below is because I implemented the block in a module of a sub-package; this ModNeedToBeDel in my case was imported either by the toppest level Main code, or by the other sub-package modules. That's why I need two different try/except.

try:
    theMod = sys.modules['UpperFolder.ModNeedToBeDel']   
except:
    theMod = None
if theMod:
    del sys.modules['UpperFolder.ModNeedToBeDel']
import ModNeedToBeDel   # or UpperFolder.ModNeedToBeDel here

```

Note that `del sys.modules[theMod]` won't work, because it just deletes the reference, instead of the actual `ModNeedToBeDel`.

Hope this could help someone so that they won't have to struggle on this issue for several days!