Skip to content

[BUG] Change to pathlib causes Permission Errors when checking for config files #181

Closed
pypa/setuptools
#3617
@jmahlik

Description

@jmahlik

c7d65dd switched over to pathlib for performing config file checks. Specifically moving from os.path.isfile(...) to pathlib.Path(...).is_file(). The behavior of pathlib seems different than os. Pathlib is propagating permission errors in certain situations where the file doesn't exist or can't be accessed.

It seems like adding error handling in distutils.dist.file_config_files could resolve the issue.

Here's the result of running python -m build with setuptools 65.0.4 (includes the most vendored commit) as the root user in ci.

* Creating venv isolated environment...\n' +
    '* Installing packages in isolated environment... (setuptools >= 40.9.0, wheel)\n' +
    '* Getting dependencies for sdist...\n' +
    '\n' +
    'ERROR Backend subprocess exited when trying to invoke get_requires_for_build_sdist',
  stderr: 'Traceback (most recent call last):\n' +
    '  File "/usr/local/lib/python3.9/dist-packages/pep517/in_process/_in_process.py", line 351, in <module>\n' +
    '    main()\n' +
    '  File "/usr/local/lib/python3.9/dist-packages/pep517/in_process/_in_process.py", line 333, in main\n' +
    "    json_out['return_val'] = hook(**hook_input['kwargs'])\n" +
    '  File "/usr/local/lib/python3.9/dist-packages/pep517/in_process/_in_process.py", line 285, in get_requires_for_build_sdist\n' +
    '    return hook(config_settings)\n' +
    '  File "/tmp/build-env-eq3q247f/lib/python3.9/site-packages/setuptools/build_meta.py", line 341, in get_requires_for_build_sdist\n' +
    '    return self._get_build_requires(config_settings, requirements=[])\n' +
    '  File "/tmp/build-env-eq3q247f/lib/python3.9/site-packages/setuptools/build_meta.py", line 320, in _get_build_requires\n' +
    '    self.run_setup()\n' +
    '  File "/tmp/build-env-eq3q247f/lib/python3.9/site-packages/setuptools/build_meta.py", line 335, in run_setup\n' +
    '    exec(code, locals())\n' +
    '  File "<string>", line 4, in <module>\n' +
    '  File "/tmp/build-env-eq3q247f/lib/python3.9/site-packages/setuptools/__init__.py", line 86, in setup\n' +
    '    _install_setup_requires(attrs)\n' +
    '  File "/tmp/build-env-eq3q247f/lib/python3.9/site-packages/setuptools/__init__.py", line 78, in _install_setup_requires\n' +
    '    dist.parse_config_files(ignore_option_errors=True)\n' +
    '  File "/tmp/build-env-eq3q247f/lib/python3.9/site-packages/setuptools/dist.py", line 862, in parse_config_files\n' +
    '    self._parse_config_files(filenames=inifiles)\n' +
    '  File "/tmp/build-env-eq3q247f/lib/python3.9/site-packages/setuptools/dist.py", line 704, in _parse_config_files\n' +
    '    filenames = self.find_config_files()\n' +
    '  File "/tmp/build-env-eq3q247f/lib/python3.9/site-packages/setuptools/_distutils/dist.py", line 337, in find_config_files\n' +
    '    files = [str(path) for path in self._gen_paths() if path.is_file()]\n' +
    '  File "/tmp/build-env-eq3q247f/lib/python3.9/site-packages/setuptools/_distutils/dist.py", line 337, in <listcomp>\n' +
    '    files = [str(path) for path in self._gen_paths() if path.is_file()]\n' +
    '  File "/usr/lib/python3.9/pathlib.py", line 1456, in is_file\n' +
    '    return S_ISREG(self.stat().st_mode)\n' +
    '  File "/usr/lib/python3.9/pathlib.py", line 1232, in stat\n' +
    '    return self._accessor.stat(self)\n' +
    "PermissionError: [Errno 13] Permission denied: '/root/.pydistutils.cfg'"

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions