Метод, который я использовал, должен делать:
if os.path.exists(target) :
subprocess.check_call(('attrib -R ' + target + '\\* /S').split())
shutil.rmtree(target)
Прежде чем кто-то скачет ко мне, я знаю, что это ужасно непитоноязычное, но, возможно, проще, чем более традиционные ответы выше, и был надежным.
Я не уверен, что происходит с атрибутами чтения / записи в каталогах. Но это еще не проблема.