Skip to content

Bug report: shutil.make_archive() makes empty archive file even when root_dir does not exists #99203

Description

@mski-iksm

Bug report

In python 3.10+, shutil.make_archive() makes empty archive file and does not raise any error even when root_dir does not exists.
In python -3.9, FileNotFoundError is raised with message [Errno 2] No such file or directory: ‘xxxxxxx’.

import shutil

shutil.make_archive(base_name='aaa_archive', root_dir="not_existing_dir", format="zip")
# This will raise FileNotFoundError in python ~3.9, where it doesn’t in 3.10~

I though making empty archive file is unnatural, so fixing it maybe good for backward compatibility.

I think this problem is caused in this line, where os.chdir(root_dir) is not called anymore.
In the previous code, os.chdir(root_dir) will raise FileNotFoundError when root_dir does not exists.
https://github.com/python/cpython/pull/93160/files#diff-db8ac59326160713929e0e1973aef54f0280fe9f154ef24d14244909a0e0689bL1084

I thought checking the existence of root_dir and raise FileNotFoundError when root_dir is not found, might be a good implementation to fix this problem.

Linked PRs

Activity

  1. added
    stdlibStandard Library Python modules in the Lib/ directory
    3.11only security fixes
    3.12only security fixes
    on Nov 9, 2022
  2. 6t8k commented on Jan 29, 2023

    @6t8k
    Contributor
  3. added a commit that references this issue on Aug 16, 2023
  4. added a commit that references this issue on Aug 16, 2023
  5. added a commit that references this issue on Aug 16, 2023
  6. added a commit that references this issue on Aug 16, 2023
  7. added a commit that references this issue on Aug 16, 2023
  8. chrkr commented on Apr 30, 2024

    @chrkr

    Would it be an idea to backport this fix to 3.10 as well? Because there is now a slight range of Python versions where using '' as the root_path does work (3.10.6 - 3.11.4) and it just so happens that using the 'latest' version of each release this fails in all versions except 3.10.

  9. merwok commented on Apr 30, 2024

    @merwok
    Member

    Only security fixes are accepted for 3.10

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.11only security fixes3.12only security fixesstdlibStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions