Skip to content

Conversation

@tadejmagajna
Copy link
Contributor

@tadejmagajna tadejmagajna commented Jan 10, 2026

This change ensures shutil.make_archive accepts path-like objects such as Pathlib.pathfor all parameters regardless of input. Includes lightweight tests and updated documentation with refreshed examples.

While shutil.make_archive did support Pathlib.path inputs in some cases, this behavior was undocumented, untested and resulted in an exception if root_dir was None. This case is well described in #94844 (comment).

This PR addresses the above issue following this suggested approach.


📚 Documentation preview 📚: https://cpython-previews--143668.org.readthedocs.build/

Support for path-like objects such as `Pathlib.path` in `shutil.make_archive`.
The change ensures path-like support for all parameters regardless of input.
Added lightweight tests and updated documentation including examples.
@tadejmagajna
Copy link
Contributor Author

@serhiy-storchaka nicely described the suggested approach in #94844 (comment). Wondering if it is possible get a PR review for this.

*root_dir* is a directory that will be the root directory of the
archive, all paths in the archive will be relative to it; for example,
we typically chdir into *root_dir* before creating the archive.
*root_dir* is the :term:`path-like object` specifying a directory that will
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Strings are also accepted. And support of path-like objects is not guaranteed -- it only works because the standard archivers support this. Explicit support in the make_archive() code is needed.

This is another undocumented implementation detail, but integer can also work (if it is a file descriptor of the open directory) on some platforms. If this worked in some cases, it would be better to ensure that it still works in that cases. We should also consider to make this an officially supported feature, like path-like objects.

Copy link
Contributor Author

@tadejmagajna tadejmagajna Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, documented as per the suggestion and ensured make_archive now supports path-like root_dir explicitly.

Regarding integer case, would it be reasonable to open a separate issue and document the integer feature there?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants