API для shutil.ignore_patterns () не поддерживает абсолютные пути, но ваш собственный вариант довольно просто бросить.
В качестве отправной точки посмотрите исходный код * ignore_patterns *:
def ignore_patterns(*patterns):
"""Function that can be used as copytree() ignore parameter.
Patterns is a sequence of glob-style patterns
that are used to exclude files"""
def _ignore_patterns(path, names):
ignored_names = []
for pattern in patterns:
ignored_names.extend(fnmatch.filter(names, pattern))
return set(ignored_names)
return _ignore_patterns
Вы можете видеть, что он возвращает функцию, которая принимает путь и список имен, и возвращает набор имен, которые следует игнорировать. Для поддержки вашего варианта использования создайте собственную подобную функцию, которая использует аргумент path . Передайте вашу функцию параметру игнорирования в вызове copytree () .
В качестве альтернативы, не используйте shutil как есть. Исходный код короткий и приятный, поэтому его нетрудно вырезать, вставить и настроить.