'Python name 'os' is not defined even though it is explicitly imported

I have a module called imtools.py that contains the following function:

import os 

def get_imlist(path):
    return[os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')]

When I attempt to call the function get_imlist from the console using import imtools and imtools.get_imlist(path), I receive the following error:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\...\PycharmProjects\first\imtools.py", line 5, in get_imlist
NameError: name 'os' is not defined

I'm new at Python and I must be missing something simple here, but cannot figure this out. If I define the function at the console it works fine. The specific history of this module script is as follows: initially it was written without the import os statement, then after seeing the error above the import os statement was added to the script and it was re-saved. The same console session was used to run the script before and after saving.



Solution 1:[1]

Based on small hints, I'm going to guess that your code didn't originally have the import os line in it but you corrected this in the source and re-imported the file.

The problem is that Python caches modules. If you import more than once, each time you get back the same module - it isn't re-read. The mistake you had when you did the first import will persist.

To re-import the imtools.py file after editing, you must use reload(imtools).

Solution 2:[2]

Same problem is with me I am also trying to follow the book of Programming Computer Vision with Python by Jan Erik Solem" [http://programmingcomputervision.com/]. I tried to explore on internet to see the problem but I did not find any valuable solution but I have solved this problem by my own effort.

First you just need to place the 'imtools.py' into the parent folder of where your Python is installed like C:\Python so place the file into that destination and type the following command:

from PIL import Image
from numpy import *
from imtools import *

Instead of typing the code with imtools.get_imlist() you just to remove the imtools from the code like:

get_imlist()

This may solve your problem as I had found my solution by the same technique I used.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Mark Ransom
Solution 2 Waseem Ali