Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test_cygwin job failing after adding ruff #3921

Open
jaraco opened this issue May 11, 2023 · 5 comments
Open

test_cygwin job failing after adding ruff #3921

jaraco opened this issue May 11, 2023 · 5 comments

Comments

@jaraco
Copy link
Member

jaraco commented May 11, 2023

In d2ec047, I replaced pytest-flake8 with pytest-ruff (jaraco/skeleton#79). Unfortunately, adding ruff implies adding a dependency on Rust :( and the test_cygwin job is failing in CI because it doesn't have rust.

@jaraco
Copy link
Member Author

jaraco commented May 11, 2023

In 51408ac, I disabled the cygwin job, but then the builds started failing on Python 3.12 where they didn't previously. I don't understand why. Does the codebase no longer work with Python 3.12 in non-main branches?

@abravalheri
Copy link
Contributor

abravalheri commented May 11, 2023

Hi @jaraco, I noticed that the skeleton project does not have any skeleton folder or skeleton.py that can be imported when the package is installed. Nevertheless, the docs still specify .. automodule:: skeleton.

Could it be the case a new version of sphinx (version 7.0.0 was released on Apr 29) behaves differently when it cannot import a package? Or maybe sphinx 7.0.0 has some conditional logic for automodule in Python 3.12?

If I run:

> docker run --rm -it python:3.12.0a7-bullseye /bin/bash
git clone https://github.com/jaraco/skeleton /tmp/skeleton
cd /tmp/skeleton
python3.12 -m venv .venv
.venv/bin/python -m pip install -e '.[docs,testing]'
cd docs
../.venv/bin/python -m sphinx -W --keep-going . _build/html
# ...
# WARNING: autodoc: failed to import module 'skeleton'; the following exception was raised:
# No module named 'skeleton'
# ...
# build finished with problems, 1 warning

I can see the error happening.

However if I manually add a skeleton directory before installing, Sphinx does not show an error:

> docker run --rm -it python:3.12.0a7-bullseye /bin/bash
git clone https://github.com/jaraco/skeleton /tmp/skeleton
cd /tmp/skeleton
mkdir skeleton
python3.12 -m venv .venv
.venv/bin/python -m pip install -e '.[docs,testing]'
cd docs
../.venv/bin/python -m sphinx -W --keep-going . _build/html
# ...
# build succeeded.
# The HTML pages are in _build/html.

@jaraco
Copy link
Member Author

jaraco commented May 11, 2023

I se I must have confused myself. I didn't mean to be looking at the pipelines on skeleton but on Setuptools. Here I'm mainly concerned about making sure the Setuptools pipelines are passing.

Error is here:

.pkg: build_editable> python /opt/hostedtoolcache/Python/3.12.0-alpha.7/x64/lib/python3.12/site-packages/pyproject_api/_backend.py True setuptools.build_meta
python: packaging backend failed (code=1), with ValueError: invalid literal for int() with base 10: 'unknown'
warning: no files found matching '*.py' under directory 'tests'
warning: no files found matching '*.txt' under directory 'docs'
warning: no files found matching '*.conf' under directory 'docs'
warning: no files found matching '*.css' under directory 'docs'
warning: no files found matching '*.css_t' under directory 'docs'
warning: no files found matching 'Makefile' under directory 'docs'
warning: no files found matching 'indexsidebar.html' under directory 'docs'
warning: no files found matching 'msvc-build-launcher.cmd'
Traceback (most recent call last):
  File "/home/runner/work/setuptools/setuptools/setuptools/command/editable_wheel.py", line 140, in run
    self._ensure_dist_info()
  File "/home/runner/work/setuptools/setuptools/setuptools/command/editable_wheel.py", line 159, in _ensure_dist_info
    dist_info.run()
  File "/home/runner/work/setuptools/setuptools/setuptools/command/dist_info.py", line 103, in run
    bdist_wheel = self.get_finalized_command('bdist_wheel')
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/setuptools/setuptools/setuptools/_distutils/cmd.py", line 304, in get_finalized_command
    cmd_obj = self.distribution.get_command_obj(command, create)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/setuptools/setuptools/setuptools/_distutils/dist.py", line 860, in get_command_obj
    klass = self.get_command_class(command)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/setuptools/setuptools/setuptools/dist.py", line 966, in get_command_class
    self.cmdclass[command] = cmdclass = ep.load()
                                        ^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.0-alpha.7/x64/lib/python3.12/importlib/metadata/__init__.py", line 203, in load
    module = import_module(match.group('module'))
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.0-alpha.7/x64/lib/python3.12/importlib/__init__.py", line 124, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1334, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1307, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1278, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 841, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 1023, in exec_module
  File "<frozen importlib._bootstrap>", line 400, in _call_with_frames_removed
  File "/home/runner/work/setuptools/setuptools/.tox/.pkg/lib/python3.12/site-packages/wheel/bdist_wheel.py", line 55, in <module>
    setuptools_major_version = int(setuptools.__version__.split(".")[0])
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: 'unknown'
/home/runner/work/setuptools/setuptools/setuptools/command/editable_wheel.py:151: _DebuggingTips: An error happened while installing 'setuptools' in editable mode.

        ************************************************************************
        The following steps are recommended to help debugging this problem:

        - Try to install the project normally, without using the editable mode.
          Does the error still persists?
          (If it does, try fixing the problem before attempting the editable mode).
        - If you are using binary extensions, make sure you have all OS-level
          dependencies installed (e.g. compilers, toolchains, binary libraries, ...).
        - Try the latest version of setuptools (maybe the error was already fixed).
        - If you (or your project dependencies) are using any setuptools extension
          or customization, make sure they support the editable mode.

        After following the steps above, if the problem still persist and
        you think this is related to how setuptools handles editable installations,
        please submit a reproducible example
        (see https://stackoverflow.com/help/minimal-reproducible-example) to:

            https://github.com/pypa/setuptools/issues

        More information about editable installs can be found in the docs:

            https://setuptools.pypa.io/en/latest/userguide/development_mode.html
        ************************************************************************
        
  _DebuggingTips.warn(project)
Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.12.0-alpha.7/x64/lib/python3.12/site-packages/pyproject_api/_backend.py", line 90, in run
    outcome = backend_proxy(parsed_message["cmd"], **parsed_message["kwargs"])
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.0-alpha.7/x64/lib/python3.12/site-packages/pyproject_api/_backend.py", line 32, in __call__
    return getattr(on_object, name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/setuptools/setuptools/setuptools/build_meta.py", line 442, in build_editable
    return self._build_with_temp_dir(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/setuptools/setuptools/setuptools/build_meta.py", line 398, in _build_with_temp_dir
    self.run_setup()
  File "/home/runner/work/setuptools/setuptools/setuptools/build_meta.py", line 335, in run_setup
    exec(code, locals())
  File "<string>", line 87, in <module>
  File "/home/runner/work/setuptools/setuptools/setuptools/__init__.py", line 108, in setup
    return distutils.core.setup(**attrs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/setuptools/setuptools/setuptools/_distutils/core.py", line 185, in setup
    return run_commands(dist)
           ^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/setuptools/setuptools/setuptools/_distutils/core.py", line 201, in run_commands
    dist.run_commands()
  File "/home/runner/work/setuptools/setuptools/setuptools/_distutils/dist.py", line 969, in run_commands
    self.run_command(cmd)
  File "/home/runner/work/setuptools/setuptools/setuptools/dist.py", line 1221, in run_command
    super().run_command(command)
  File "/home/runner/work/setuptools/setuptools/setuptools/_distutils/dist.py", line 988, in run_command
    cmd_obj.run()
  File "/home/runner/work/setuptools/setuptools/setuptools/command/editable_wheel.py", line 140, in run
    self._ensure_dist_info()
  File "/home/runner/work/setuptools/setuptools/setuptools/command/editable_wheel.py", line 159, in _ensure_dist_info
    dist_info.run()
  File "/home/runner/work/setuptools/setuptools/setuptools/command/dist_info.py", line 103, in run
    bdist_wheel = self.get_finalized_command('bdist_wheel')
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/setuptools/setuptools/setuptools/_distutils/cmd.py", line 304, in get_finalized_command
    cmd_obj = self.distribution.get_command_obj(command, create)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/setuptools/setuptools/setuptools/_distutils/dist.py", line 860, in get_command_obj
    klass = self.get_command_class(command)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/setuptools/setuptools/setuptools/dist.py", line 966, in get_command_class
    self.cmdclass[command] = cmdclass = ep.load()
                                        ^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.0-alpha.7/x64/lib/python3.12/importlib/metadata/__init__.py", line 203, in load
    module = import_module(match.group('module'))
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.0-alpha.7/x64/lib/python3.12/importlib/__init__.py", line 124, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1334, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1307, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1278, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 841, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 1023, in exec_module
  File "<frozen importlib._bootstrap>", line 400, in _call_with_frames_removed
  File "/home/runner/work/setuptools/setuptools/.tox/.pkg/lib/python3.12/site-packages/wheel/bdist_wheel.py", line 55, in <module>
    setuptools_major_version = int(setuptools.__version__.split(".")[0])
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: 'unknown'
Backend: run command build_editable with args {'wheel_directory': '.tox/.pkg/dist', 'config_settings': {'--build-option': []}, 'metadata_directory': None}

@abravalheri
Copy link
Contributor

abravalheri commented May 11, 2023

Regarding the errors in setuptools.__version__

(Ref: https://github.com/pypa/setuptools/actions/runs/4943028741/jobs/8837121715)

It is been a while that we are experiencing flaky tests erroring in things related to importlib.metadata.
I think they first started appearing with the change in importlib-metadata v5.2.0 (vendored in setuptools v67.4.0).

@jaraco, after some investigation, I suspect that the problem is the following:

  1. The setuptools test suite runs with pytest-xdist (for the sake of speed)
  2. During the tests setuptools.build_meta is called by different tests to build setuptools itself.
  3. setuptools.build_meta calls egg_info a few times (for each one of the PEP 517 hooks, including get_requires*).
  1. While the PKG-INFO file is rewritten, the tests will try to use importlib_metadata (e.g. to read version, entry-points, to find plugins for pytest/flake8, etc..), which in turn will try to read the PKG-INFO (because setuptools.egg-info is in sys.path, due to the flat layout in the repository).
  2. There is a race condition between egg_info and importlib_metadata which results in the PKG-INFO file being empty.

Right now we don't have a way to avoid running egg_info, and moreover when I tried to change setuptools.build_meta to set egg_base to a temporary directory, I had bootstrapping issues.

The bootstrap issues occur because bootstrap.egg-info/entry_points.txt only have the minimum necessary to run egg_info, and the whole bootstrapping process accidentally rely on the fact that egg_info will generate another setuptools.egg-info/entry_points.txt in the project root file before other PEP 517 hooks are called (so when build_sdist and build_wheel are called, importlib_metadata.entry_points can find the final entrypoints specified by setuptools in its setup.cfg).

In #3904, when I was investigating this problem I tried to improve the way the PKG-INFO files are generated to be more "atomic" (ae8ec5c). This should be an improvement but it is not the whole solution.

I also run into the setuptools.__version__ problem and added a workaround in #3915.

@jaraco
Copy link
Member Author

jaraco commented May 11, 2023

I also run into the setuptools.__version__ problem and added a workaround in #3915.

Aha. I was sure I'd synced to the latest main before working on this issue, but it seems I had not (51408ac
is based on an old parent).

bootstrapping process accidentally rely on

I wouldn't say it's accidental. I'd intended for the bootstrapping to provide the minimum customization to allow setuptools to run normally (and minimize duplication).

clrpackages pushed a commit to clearlinux-pkgs/pypi-setuptools that referenced this issue May 23, 2023
…version 67.8.0

Anderson Bravalheri (3):
      Adequate venv fixtures to the latest change in virtualenv
      Add news fragment
      Attempt to use a valid PEP 440 version fallback

Bo Bayles (1):
      Fix typo in docs

Gregory Starck (7):
      Fix: reload and merge easy-install pth file before save
      Rework test_many_pth_distributions_merge_together
      Add better comments
      Check in memory before disk + force clean rewrite
      Flake8 pass
      Final comments
      Better comments again

Jason R. Coombs (11):
      Fix linter error
      Remove unnecessary and incorrect copyright notice. Fixes jaraco/skeleton#78.
      Replace flake8 with ruff. Fixes jaraco/skeleton#79 and sheds debt.
      Disable ruff on cygwin where rust compiler isn't available. Ref pypa/setuptools#3921.
      ⚫ Fade to black.
      👹 Feed the hobgoblins (delint).
      Add changelog
      👹 Feed the hobgoblins (delint).
      👹 Feed the hobgoblins (delint).
      👹 Feed the hobgoblins (delint).
      Bump version: 67.7.2 → 67.8.0

Joyce (1):
      Feat: initial permissions to main.yml (jaraco/skeleton#76)
jaraco added a commit to pypa/distutils that referenced this issue Nov 5, 2023
jaraco added a commit to pypa/distutils that referenced this issue Nov 5, 2023
@jaraco jaraco mentioned this issue Nov 8, 2023
2 tasks
clrpackages pushed a commit to clearlinux-pkgs/pypi-setuptools that referenced this issue Nov 28, 2023
…version 69.0.2

Anderson Bravalheri (50):
      Temporarily disable overdue deprecations
      Remove sphinx-hoverxref
      Unify passenv with pass_env in tox.ini so we don't have trouble with TOX_OVERRIDE
      Docs: use Python 3.11 inventory to avoid errors with distutils references
      Refactor type files tests in test_build_py
      Avoid running build_py in tests to speed up process
      Mark feature as experimental in docs
      Avoid modifying dict in test_build_py
      Apply suggestions from code review
      Fix failing CI (#4110)
      Re-enable deprecation warning enforcement
      Remove deprecation warning from _normalization.best_effort_version
      Remove egg_base option from dist_info
      Ensure tags generated by egg_info are valid
      Remove 'requires' and 'license_file' from setup.cfg
      Improve explanation of difference between safe_version and best_effort_version
      Remove deprecation warning for config_settings --global-option
      Remove deprecation warning for invalid versions in setuptools.dist
      Add news fragments
      Xfail on deprecated bdist_rpm tests
      Be strict on missing 'dynamic' in pyproject.toml
      Enforce namespace-packages are not used in pyproject.toml
      Use custom class for InvalidConfigError
      Add newsfragments for latest removals
      Update newsfragments
      Fix lint errors
      Add workaround for unreleased PyNaCl
      Only pass `--build-option` to `bdist_wheel` in build_meta
      Remove no longer valid tests for config_settings and editable installs
      Add news fragment
      Update guides on datafiles
      Add note abot using namespace packages for data files
      Add note about dynamic configs via attr and imports
      Use InvalidConfigError instead of ValueError in build_meta
      Remove deprecated handling of build-option passed as global-option
      Relax validation of --global-option in build_meta
      Add newsfragment
      Mark flaky test on  with xfail
      Add pragma for xfail condition
      Add reference to PR number in xfail message
      Fix lint error
      Add missing contextmanager to decorator
      Use wrapper for decorator instead of contextlib
      Bump version: 68.2.2 → 69.0.0
      Allow imports of setuptools.dep_util.newer_group with deprecation warning
      Add newsfragment
      Bump version: 69.0.0 → 69.0.1
      Improve warning visibility with due date and reference url
      Add news fragment
      Bump version: 69.0.1 → 69.0.2

Avasam (4):
      Re-export `distutils.dep_util` in `setuptools.dep_util`
      Added towncrier file
      Added towncrier file
      Update newsfragments/4069.feature.rst

Danie-1 (1):
      Use generators

Daniel Naylor (11):
      Include type information by default
      Add newsfragment
      Revert "Use generators"
      Revert "Include type information by default"
      Rename newsfragment file
      Add tests to check type information is included by default
      Format test with black
      Include type information by default
      Move tests from test_build_meta to test_build_py
      Fix test on windows by replacing os.sep
      Fix typo in docs

Daniel Nunes (1):
      Added tests for newer_pairwise_group().

Dimitri Papadopoulos (8):
      Fix typo found by codespell
      Fix a couple typos found by codespell
      Update URLs in documentation: http:// → https://
      io.open() → open()
      IOError → OSError
      "yield from", instead of "yield" in a loop
      socket.error → OSError
      @functools.lru_cache() → @functools.lru_cache

Jason R. Coombs (36):
      Rely on pytest as found in pytest-dev/pytest#11155. Fixes pypa/distutils#186.
      Pin against sphinx 7.2.5 as workaround for sphinx/sphinx-doc#11662. Closes jaraco/skeleton#88.
      Allow GITHUB_* settings to pass through to tests.
      Remove spinner disablement. If it's not already fixed upstream, that's where it should be fixed.
      Clean up 'color' environment variables.
      Add diff-cover check to Github Actions CI. Closes jaraco/skeleton#90.
      Add descriptions to the tox environments. Closes jaraco/skeleton#91.
      Add FORCE_COLOR to the TOX_OVERRIDE for GHA. Requires tox 4.11.1. Closes jaraco/skeleton#89.
      Prefer ``pass_env`` in tox config. Preferred failure mode for tox-dev/tox#3127 and closes jaraco/skeleton#92.
      Clean up docstrings and remove crufty comments. Replace integer literals with booleans.
      "Refactor to newer_group to utilize higher level constructs ("any"), re-use _newer logic, and avoid complexity in branching."
      Prefer os.path.getmtime
      Inline check for target presence.
      Add test for newer_pairwise, bringing coverage in dep_util to 100%.
      Replace for/append loop with a filter function (newer_pair).
      Replace explicit list check with zip(strict=True). Allows inputs to be iterables.
      Extract a 'starfilter', similar to itertools.starmap, to generalize the concept of filtering results over a sequence of tuples.
      Replace '_starfilter' with 'jaraco.functools.splat'.
      Move dep_util to _modified and mark dep_util as deprecated.
      Extend tests for newer_pairwise and fix failed expectation when no files are newer.
      Add newer_pairwise_group (inspired by setuptools.dep_util).
      Modernize test_newer_pairwise_group by using tmp_path and a SimpleNamespace.
      Remove latent references in docs.
      Limit sphinxlint jobs to 1. Workaround for sphinx-contrib/sphinx-lint#83.
      Replace git version with released version. Ref #186.
      Disable cygwin tests for now. Ref pypa/setuptools#3921
      Disable integration test due to known breakage from deprecation warnings.
      Allow diffcov to fail also, as it requires the tests to pass on the latest Python to succeed.
      Remove newsfragment
      Copy concurrency setting from setuptools
      Rely on distutils._modified and deprecated setuptools.dep_util.
      Add news fragment.
      Use 'setuptools.modified' as the consolidated module for modified file functions.
      Fallback when SETUPTOOLS_USE_DISTUTILS=stdlib
      Make the example pyproject.toml valid toml so it doesn't crash docs builds. Closes #4118.
      Exclude setuptools.modified from test collection to avoid early import.

Jean Abou Samra (5):
      Import PUG guide to MANIFEST.in
      Add the more complete list
      Revise list of default included files
      Add warning about other setuptools versions
      Link to the new pyproject.toml guide the PUG

Miro Hrončok (1):
      Fix setuptools.depends:get_module_constant() on Python 3.13.0a1
jaraco added a commit to pypa/distutils that referenced this issue Apr 14, 2024
jaraco added a commit that referenced this issue Jul 10, 2024
jaraco added a commit that referenced this issue Jul 10, 2024
jaraco added a commit to pypa/distutils that referenced this issue Jul 10, 2024
clrpackages pushed a commit to clearlinux-pkgs/pypi-setuptools that referenced this issue Aug 15, 2024
…version 72.2.0

Christoph Reiter (6):
      find_library_file: port from doctest to normal test and fix for cygwin
      test_customize_compiler_with_msvc_python: skip for cygwin
      CI: add a job for running tests under MSVC CPython with GCC as the default compiler
      mingw: make get_msvcr() a noop
      venv_install_options: add missing clear_argv fixture
      Remove unused RangeMap

Jason R. Coombs (42):
      👹 Feed the hobgoblins (delint).
      👹 Feed the hobgoblins (delint).
      Adjust expectation to match behavior.
      For consistency, ensure Extension.sources is always a pathlib.Path object and adjust expectations in tests.
      When computing input_opt, ensure src is a string (when it could be a pathlib Path).
      In filelist, allow for self.files to be pathlib objects.
      Revert "Disable cygwin tests for now. Ref pypa/setuptools#3921"
      Simply accept pathlib objects and convert them early for compatibilty with upstream.
      Reword docs on 'Build system requirement' to use imperative voice.
      Add guidance on pinning the upper bound in build-system.requires.
      Pin towncrier in docs build.
      Prefer f-strings
      Need to include 'three' in the input.
      Consolidate str and Path handling.
      Remove r string now that docstring is gone.
      Expand convert_path to also accept pathlib.Path objects.
      👹 Feed the hobgoblins (delint).
      Prefer simply 'pathlib' for import.
      👹 Feed the hobgoblins (delint).
      Extract a singledispatchmethod _copy for handling the copy of each data file.
      Use explicit registration for compatibility with older Pythons.
      Prefer os.PathLike in convert_path
      Convert needs to accept None for Setuptools' sake.
      In test_convert_path, utilize posixpath.join and ntpath.join for maximum compatibility with other libraries.
      Wrap paths in PurePosixPath to ensure that any WindowsPaths don't get backslashes.
      convert_path no longer fails if passed a path with a trailing slash. Instead, trailing slashes are stripped just as they are with pathlib.Path.
      convert_path now converts to a platform-native path.Path, but then calls `.as_posix()` on it.
      Separate test_convert_path into two tests to avoid interactions in monkeypatching os.path.
      Remove expectation that a ValueError is raised for data_files being drive-relative absolute on Windows.
      Simplify convert_path by simply relying on the logic in PurePath.
      Harmonize convert_path tests across Unix and Windows.
      Consolidate convert_path tests and just generate the expected value in a platform-sensitive way. Should fix failures on mingw.
      Harmonize '-shared' parameter for C and C++ in Mingw32CCompiler
      In sysconfig.customize_compiler, initialize ldcxxshared from config vars.
      Refactored customize_compiler to reduce logical branches and extract _add_flags logic.
      Use simple import
      Don't add flags when the value is None, such as when on PyPy, LDCXXSHARED is unset.
      Rely on monkeysession to monkeypatch.
      Apply isort. Ref pypa/distutils#240
      Add news fragment.
      Correct reference in news fragment. Ref #4539
      Bump version: 72.1.0 → 72.2.0

Michael Carlstrom (1):
      Allow path objects

Mridul Seth (1):
      ENH: Extension should be able to accept PathLike sources objects

Samuel Cormier-Iijima (3):
      Distutils C++ support
      Adjust tests further to accommodate C++ support.
      Ignore sysconfig variables for LDCXXSHARED as it appears not to exist on PyPy.

connortann (1):
      [Docs] Minor grammar fix in dependency_management.rst
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants