create cache dir if it doesn't exist

isn't this what `os.path.join` is for?