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

Arch with python-pip: TypeError: expected string or bytes-like object #9348

Closed
GrzegorzKozub opened this issue Dec 20, 2020 · 28 comments · Fixed by #9467
Closed

Arch with python-pip: TypeError: expected string or bytes-like object #9348

GrzegorzKozub opened this issue Dec 20, 2020 · 28 comments · Fixed by #9467

Comments

@GrzegorzKozub
Copy link

As soon as I've upgraded Python from 3.8 to 3.9 on Arch Linux I noticed a strange behaviour with all packages that depend on setuptools. What I'll decribe below does NOT happen with Python 3.8 and these packages nor with Python 3.9 and packages that do not depend on setuptools. This is shy I'm reporting this issue here.

  1. Have a fresh Python 3.9 installation with no --user packages, meaning ~/.local/bin, ~/.local/lib and ~/.local/include are all empty
  2. Install a package that does not depend on setuptools, for example pip install --user vim-vint - installs OK
  3. Install the same or any other package that that does not depend on setuptools - installs OK
  4. Install any package that depends on setuptools, for example pip install --user locust - installs OK
  5. Try installing any package now - always fails with the following error
ERROR: Exception:
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/pip/_internal/cli/base_command.py", line 216, in _main
    status = self.run(options, args)
  File "/usr/lib/python3.9/site-packages/pip/_internal/cli/req_command.py", line 182, in wrapper
    return func(self, options, args)
  File "/usr/lib/python3.9/site-packages/pip/_internal/commands/install.py", line 324, in run
    requirement_set = resolver.resolve(
  File "/usr/lib/python3.9/site-packages/pip/_internal/resolution/legacy/resolver.py", line 183, in resolve
    discovered_reqs.extend(self._resolve_one(requirement_set, req))
  File "/usr/lib/python3.9/site-packages/pip/_internal/resolution/legacy/resolver.py", line 388, in _resolve_one
    abstract_dist = self._get_abstract_dist_for(req_to_install)
  File "/usr/lib/python3.9/site-packages/pip/_internal/resolution/legacy/resolver.py", line 331, in _get_abstract_dist_for
    skip_reason = self._check_skip_installed(req)
  File "/usr/lib/python3.9/site-packages/pip/_internal/resolution/legacy/resolver.py", line 236, in _check_skip_installed
    req_to_install.check_if_exists(self.use_user_site)
  File "/usr/lib/python3.9/site-packages/pip/_internal/req/req_install.py", line 437, in check_if_exists
    if not self.req.specifier.contains(existing_version, prereleases=True):
  File "/usr/lib/python3.9/site-packages/packaging/specifiers.py", line 790, in contains
    item = parse(item)
  File "/usr/lib/python3.9/site-packages/packaging/version.py", line 57, in parse
    return Version(version)
  File "/usr/lib/python3.9/site-packages/packaging/version.py", line 296, in __init__
    match = self._regex.search(version)
TypeError: expected string or bytes-like object

At this point you are unable to use pip install because it will always give the above error.

Observation: even though setuptools was originally installed in /usr/lib/python3.9/site-packages/, after we've installed a package that depends on setuptools it was also put in ~/.local/lib/python3.9/site-packages/.

@jaraco
Copy link
Member

jaraco commented Dec 20, 2020

I attempted to replicate the issue you described with this Dockerfile but was unsuccessful:

FROM archlinux
RUN pacman -Sy python-pip --noconfirm
RUN pip install --user zope.interface
RUN pip install pipx

The install zope.interface line shows this output:

Collecting zope.interface
  Downloading zope.interface-5.2.0-cp39-cp39-manylinux2010_x86_64.whl (241 kB)
Requirement already satisfied: setuptools in /usr/lib/python3.9/site-packages (from zope.interface) (51.0.0)
Installing collected packages: zope.interface
Successfully installed zope.interface-5.2.0

Note, locust doesn't depend on setuptools directly, but does indirectly through zope.interface (and others), so I've used zope.interface in place of locust for faster resolution.

Can you help produce a Dockerfile that replicates the undesirable behavior?

@GrzegorzKozub
Copy link
Author

Thanks for looking into it! In fact, and I previously did not think this was important, I'm using --force-reinstall param to perform an update of already installd packages. This param seems to be the culprit here.

FROM archlinux
RUN pacman -Sy --noconfirm
RUN pacman -S --noconfirm python python-pip
RUN pip install --user zope.interface
RUN pip install --user zope.interface
RUN pip install --user --force-reinstall zope.interface
RUN pip install --user zope.interface

Although setuptools is installed globally in /usr/lib/python3.9/site-packages/, as soon as I install anything using --force-reinstall, setuptools gets installed locally into ~/.local/lib/python3.9/site-packages/ and the whole pip install is not usable anymore with any package.

This brings me to a conclusion that I have setuptools 51.0 globally but when I --upgrade it then 51.1 is installed locally and that seems to be breaking pip install:

FROM archlinux
RUN pacman -Sy --noconfirm
RUN pacman -S --noconfirm python python-pip
RUN pip install --user --upgrade setuptools
RUN pip install --user lastversion

@GrzegorzKozub GrzegorzKozub changed the title Installing any package that depends on setuptools makes pip install unusable Version 51.1 introduces TypeError: expected string or bytes-like object Dec 21, 2020
@jaraco
Copy link
Member

jaraco commented Dec 21, 2020

Thanks Grzegorz for the repro. With that, I think I've refined the problem a bit further. If you don't install python-pip but instead install pip from source, then also install setuptools using pip (system, then user), the problem doesn't occur:

FROM archlinux
RUN pacman -Sy --noconfirm
RUN pacman -S python wget --noconfirm
RUN wget https://bootstrap.pypa.io/get-pip.py -O - | python
RUN pip install setuptools
RUN pip install --user --upgrade setuptools
RUN pip install lastversion

That leads me to believe that the Arch packaging of pip (or its version) may also be implicated.

@GrzegorzKozub
Copy link
Author

Based on that, I feel like it's more Arch package than setuptools itself. I will consider reporting this issue in Arch bug tracker and I think you can close this issue here at your convenience. Thanks for helping out and mery xmas!

@rlaphoenix
Copy link

I'm also on arch linux and have been getting this over the past couple of days. Surely it's no coincidence that mainly arch linux users are having the problem?

All that I needed to do was install pip from source rather than from the arch repo: sudo wget https://bootstrap.pypa.io/get-pip.py -O - | python

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

To be sure, the issue isn't strictly due to arch's python-pip. Changing the repro to install setuptools<51.1 also bypasses the error, confirming the "Version 51.1" indication in the report.

FROM archlinux
RUN pacman -Sy --noconfirm
RUN pacman -S --noconfirm python python-pip
RUN pip install --user --upgrade 'setuptools<51.1'
RUN pip install --user lastversion

I looked at the changes for 51.1 and there's nothing there that strikes me as particularly implicated. Here's the diff: https://github.com/pypa/setuptools/compare/v51.0.0..v51.1.0

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

I wonder if maybe the issue is this empty install_requires directive. I've used that same syntax in other projects with no declared dependencies and never had an issue with it, but it seems plausible this declaration has revealed a defect in setuptools or pip.

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

I think I've disconfirmed that theory with this Dockerfile, which still fails:

FROM archlinux
RUN pacman -Sy --noconfirm
RUN pacman -S --noconfirm python python-pip
RUN pacman -S --noconfirm git
RUN git clone --branch workaround/2495-no-install-requires --depth 10 https://github.com/pypa/setuptools
WORKDIR setuptools
RUN python bootstrap.py
RUN pip install --user .
WORKDIR /
CMD pip install --user lastversion

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

I also tried cleaning the indentation on the setup.cfg, but that had no effect on the failure either (6ab9f473c87058ffdc88f357d167d7f7b2750154).

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

I tried using pdb to debug pip, but unfortunately, pip is unfriendly to debuggers:

[root@61533a76fa1c /]# python -m pdb -m pip install --user lastversion
> /usr/lib/python3.9/site-packages/pip/__main__.py(1)<module>()
-> from __future__ import absolute_import
(Pdb) c
Collecting lastversion
  Downloading lastversion-1.2.4-py3-none-any.whl (32 kB)
ERROR: Exception:
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/pip/_internal/cli/base_command.py", line 228, in _main
    status = self.run(options, args)
  File "/usr/lib/python3.9/site-packages/pip/_internal/cli/req_command.py", line 182, in wrapper
    return func(self, options, args)
  File "/usr/lib/python3.9/site-packages/pip/_internal/commands/install.py", line 323, in run
    requirement_set = resolver.resolve(
  File "/usr/lib/python3.9/site-packages/pip/_internal/resolution/legacy/resolver.py", line 183, in resolve
    discovered_reqs.extend(self._resolve_one(requirement_set, req))
  File "/usr/lib/python3.9/site-packages/pip/_internal/resolution/legacy/resolver.py", line 388, in _resolve_one
    abstract_dist = self._get_abstract_dist_for(req_to_install)
  File "/usr/lib/python3.9/site-packages/pip/_internal/resolution/legacy/resolver.py", line 331, in _get_abstract_dist_for
    skip_reason = self._check_skip_installed(req)
  File "/usr/lib/python3.9/site-packages/pip/_internal/resolution/legacy/resolver.py", line 236, in _check_skip_installed
    req_to_install.check_if_exists(self.use_user_site)
  File "/usr/lib/python3.9/site-packages/pip/_internal/req/req_install.py", line 438, in check_if_exists
    if not self.req.specifier.contains(existing_version, prereleases=True):
  File "/usr/lib/python3.9/site-packages/packaging/specifiers.py", line 790, in contains
    item = parse(item)
  File "/usr/lib/python3.9/site-packages/packaging/version.py", line 57, in parse
    return Version(version)
  File "/usr/lib/python3.9/site-packages/packaging/version.py", line 296, in __init__
    match = self._regex.search(version)
TypeError: expected string or bytes-like object
The program exited via sys.exit(). Exit status: 2
> /usr/lib/python3.9/site-packages/pip/__main__.py(1)<module>()
-> from __future__ import absolute_import
(Pdb) q

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

I tried installing the exact same versions of pip and setuptools to the system site-packages, and that succeeds without failure:

FROM archlinux
RUN pacman -Sy --noconfirm
RUN pacman -S --noconfirm python wget
RUN wget https://bootstrap.pypa.io/get-pip.py -O - | python - pip==20.2.3 setuptools==51.0.0
RUN pip install --user --upgrade setuptools
CMD pip install --user lastversion

So that indicates to me there are two factors at play here:

  • Arch packaging of python-pip, and
  • Setuptools 51.1 in user-site-packages.

Both are required to trigger the failure.

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

I'm able to replicate the issue using a local mounted copy of setuptools for the upgrade install step

FROM archlinux
RUN pacman -Sy --noconfirm
RUN pacman -S --noconfirm wget git
RUN pacman -S --noconfirm python python-pip

# pip install --user .
# pip install --user lastversion

I've tried reverting the whole setup.cfg file to the code from v51.0.0 and the problem persists, suggesting that the changes to that file aren't implicated in the issue.

@rlaphoenix
Copy link

rlaphoenix commented Dec 24, 2020

I will say, what's odd is my system pip location doesn't have setuptools installed (checked via sudo pip freeze | grep setuptools), and can't install it either (due to the issue occurring). But pip install setuptools will, and I'm on the latest pypi version of it too. Quite odd.

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

Hmm. I tried pip install --user . against a local checkout of setuptools 51.0.0, and the error remained.

I'm now beginning to think that Setuptools 51.1 isn't implicated... and the only reason I've previously been unable to replicate the issue with 51.0 was because 51.0 was the version installed by python-pip. Indeed, forcing a reinstall in the user directory replicates the issue without involving Setuptools 51.1:

FROM archlinux
RUN pacman -Sy --noconfirm
RUN pacman -S --noconfirm wget git
RUN pacman -S --noconfirm python python-pip

RUN pip install --user --force-reinstall setuptools==51
RUN pip install --user lastversion

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

checked via sudo pip freeze | grep setuptools

Some (all?) versions of pip will hide certain "special" packages, including setuptools. Run pip freeze --all to see those packages.

@jaraco jaraco changed the title Version 51.1 introduces TypeError: expected string or bytes-like object Arch with python-pip: TypeError: expected string or bytes-like object Dec 24, 2020
@rlaphoenix
Copy link

rlaphoenix commented Dec 24, 2020

checked via sudo pip freeze | grep setuptools

Some (all?) versions of pip will hide certain "special" packages, including setuptools. Run pip freeze --all to see those packages.

You're right, it shows up now. 51.1.0 on both system and user pip locations, with only user pip working.

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

I put in some troubleshooting code in req_install.py:

diff --git a/src/pip/_internal/req/req_install.py b/src/pip/_internal/req/req_install.py
index f25cec96a..59d479fd6 100644
--- a/src/pip/_internal/req/req_install.py
+++ b/src/pip/_internal/req/req_install.py
@@ -435,6 +435,12 @@ class InstallRequirement(object):
             return
 
         existing_version = existing_dist.parsed_version
+        
+        try:
+            self.req.specifier.contains(existing_version, prereleases=True)
+        except TypeError:
+            breakpoint()
+
         if not self.req.specifier.contains(existing_version, prereleases=True):
             self.satisfied_by = None
             if use_user_site:

And found these are the values present when the issue occurs:

pip install --user lastversion
Collecting lastversion
  Using cached lastversion-1.2.4-py3-none-any.whl (32 kB)
Collecting PyYAML
  Downloading PyYAML-5.3.1.tar.gz (269 kB)
     |████████████████████████████████| 269 kB 2.2 MB/s 
> /usr/lib/python3.9/site-packages/pip/_internal/req/req_install.py(444)check_if_exists()
-> if not self.req.specifier.contains(existing_version, prereleases=True):
(Pdb) self.req
<Requirement('packaging')>
(Pdb) self.req.specifier
<SpecifierSet('')>
(Pdb) existing_version
<Version('20.8')>

Here's a user reporting a very similar traceback in a very different environment. They never root-caused the issue.

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

The same error doesn't occur if I pass the same inputs to the same function:

[root@bb62d5796f95 packaging-20.8-py3.9.egg-info]# python
Python 3.9.1 (default, Dec 13 2020, 11:55:53) 
[GCC 10.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import packaging.requirements
>>> import packaging.version
>>> ver = packaging.version.Version('20.8')
>>> req = packaging.requirements.Requirement('packaging')
>>> req.specifier
<SpecifierSet('')>
>>> req.specifier.contains(ver, prereleases=True)
True

So there's another factor present that I can't yet see.

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

Okay, I'm pretty close to understanding the root cause.

Looking at the packaging.specifiers code, I see that the existing_version, even though it's a "Version", is not the same "Version" as found in packaging.specifiers, so fails this check. Back to the Pdb:

(Pdb) import packaging.specifiers
(Pdb) isinstance(existing_version, packaging.specifiers.Version)
False

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

Inspecting the class for that existing_version, here's what I see.

(Pdb) existing_version.__class__
<class 'pkg_resources.extern.packaging.version.Version'>

Here's loosely what's happening:

  • Arch de-vendors the vendored dependencies in pip and setuptools, one of which is 'packaging'.
  • Later, a version of setuptools is installed that includes the vendored dependencies.
  • Pip relies on pkg_resources, part of Setuptools, to load the installed package versions, which now defers to the user-installed setuptools with the vendored dependencies.
  • Packaging trips over itself when it gets a version parsed from a vendored copy of itself.

I'm not sure why this problem doesn't exhibit when using pip and setuptools installed with their vendored dependencies (why do the two versions of packaging not conflict between pkg_resources._vendor and pip._vendor).

Regardless, what it boils down to is that you can use one form of package management or another, but mixing arch-managed packages and pip-managed packages may encounter this issue.

This issue will likely be addressed when pip moves to relying on importlib_metadata for loading package info (#7413). This issue will also be alleviated if Setuptools could avoid vendoring dependencies, although that effort was tried and failed.

There are probably lots of related issues. I found pypa/setuptools#1383.

I'm not sure there's a lot Setuptools can do here, and it feels like there are a few options pip could take to address it, so I'm transferring this issue over to pip, although potentially it should be handled more broadly at pypa/packaging-problems.

I'll let the pip maintainers decide.

@jaraco jaraco transferred this issue from pypa/setuptools Dec 24, 2020
@uranusjr
Copy link
Member

There are actually multiple places where pip “string-type” the version to prevent this. I’m not very motivated to work on this, however, since this is very difficult to trigger, and arguably a downstream issue that Arch packagers should be responsible for. Things might be different if this happens in other parts of pip, but the two parts that cause this issue—the legacy resolver, and pkg_resources—are both on their way to retirement, and a fix would become irrelevant soon.

@pradyunsg
Copy link
Member

pip is unfriendly to debugger

Wait, what? This is news to me!

@jaraco
Copy link
Member

jaraco commented Dec 24, 2020

pip is unfriendly to debugger

Wait, what? This is news to me!

I suspect the issue is actually PEBCAK. I wanted to use python -m pdb -m pip to invoke pip under a debugger, but because pip traps exceptions, the debugger doesn't get a chance to intervene. If there were a better entry point that bypassed the exception trapping, or better, if pip could detect that it was running under a debugger and not trap global exceptions, that would make use of pdb much easier.

@pradyunsg
Copy link
Member

No worries @jaraco! I don't know if that workflow works. I have personally used only used GUI debuggers with the debugger() callback. :)


This is 100% because Arch is debundling pip, despite our advice to not do so in our vendoring policy. Please take this up with the Arch Linux maintainers.

Also, if someone could let them know that I'm requesting them actually vendor stuff in pip, in exchange for not breaking their users in weird ways, that'd be great! :)

@pradyunsg
Copy link
Member

Alternatively, users can avoid using their distro-provided pip, and use pip from get-pip.py, which won't be breakable on this manner. :)

@jaraco jaraco closed this as completed Dec 24, 2020
@rlaphoenix
Copy link

I used the get-pip via sudo, and it still fails to work via sudo pip, but regular pip now works.

@pradyunsg
Copy link
Member

Please don't sudo install pip. That's a recipe for breaking your Linux distro. :(

See https://stackoverflow.com/questions/15028648/is-it-acceptable-and-safe-to-run-pip-install-under-sudo for more details.

inmantaci added a commit to inmanta/inmanta-core that referenced this issue Apr 27, 2021
Bumps [pip](https://github.com/pypa/pip) from 21.0.1 to 21.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/pypa/pip/blob/main/NEWS.rst">pip's changelog</a>.</em></p>
<blockquote>
<h1>21.1 (2021-04-24)</h1>
<h2>Process</h2>
<ul>
<li>Start installation scheme migration from <code>distutils</code> to <code>sysconfig</code>. A
warning is implemented to detect differences between the two implementations to
encourage user reports, so we can avoid breakages before they happen.</li>
</ul>
<h2>Features</h2>
<ul>
<li>Add the ability for the new resolver to process URL constraints. (<code>[#8253](pypa/pip#8253) &lt;https://github.com/pypa/pip/issues/8253&gt;</code>_)</li>
<li>Add a feature <code>--use-feature=in-tree-build</code> to build local projects in-place
when installing. This is expected to become the default behavior in pip 21.3;
see <code>Installing from local packages &lt;https://pip.pypa.io/en/stable/user_guide/#installing-from-local-packages&gt;</code>_
for more information. (<code>[#9091](pypa/pip#9091) &lt;https://github.com/pypa/pip/issues/9091&gt;</code>_)</li>
<li>Bring back the &quot;(from versions: ...)&quot; message, that was shown on resolution failures. (<code>[#9139](pypa/pip#9139) &lt;https://github.com/pypa/pip/issues/9139&gt;</code>_)</li>
<li>Add support for editable installs for project with only setup.cfg files. (<code>[#9547](pypa/pip#9547) &lt;https://github.com/pypa/pip/issues/9547&gt;</code>_)</li>
<li>Improve performance when picking the best file from indexes during <code>pip install</code>. (<code>[#9748](pypa/pip#9748) &lt;https://github.com/pypa/pip/issues/9748&gt;</code>_)</li>
<li>Warn instead of erroring out when doing a PEP 517 build in presence of
<code>--build-option</code>. Warn when doing a PEP 517 build in presence of
<code>--global-option</code>. (<code>[#9774](pypa/pip#9774) &lt;https://github.com/pypa/pip/issues/9774&gt;</code>_)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>Fixed <code>--target</code> to work with <code>--editable</code> installs. (<code>[#4390](pypa/pip#4390) &lt;https://github.com/pypa/pip/issues/4390&gt;</code>_)</li>
<li>Add a warning, discouraging the usage of pip as root, outside a virtual environment. (<code>[#6409](pypa/pip#6409) &lt;https://github.com/pypa/pip/issues/6409&gt;</code>_)</li>
<li>Ignore <code>.dist-info</code> directories if the stem is not a valid Python distribution
name, so they don't show up in e.g. <code>pip freeze</code>. (<code>[#7269](pypa/pip#7269) &lt;https://github.com/pypa/pip/issues/7269&gt;</code>_)</li>
<li>Only query the keyring for URLs that actually trigger error 401.
This prevents an unnecessary keyring unlock prompt on every pip install
invocation (even with default index URL which is not password protected). (<code>[#8090](pypa/pip#8090) &lt;https://github.com/pypa/pip/issues/8090&gt;</code>_)</li>
<li>Prevent packages already-installed alongside with pip to be injected into an
isolated build environment during build-time dependency population. (<code>[#8214](pypa/pip#8214) &lt;https://github.com/pypa/pip/issues/8214&gt;</code>_)</li>
<li>Fix <code>pip freeze</code> permission denied error in order to display an understandable error message and offer solutions. (<code>[#8418](pypa/pip#8418) &lt;https://github.com/pypa/pip/issues/8418&gt;</code>_)</li>
<li>Correctly uninstall script files (from setuptools' <code>scripts</code> argument), when installed with <code>--user</code>. (<code>[#8733](pypa/pip#8733) &lt;https://github.com/pypa/pip/issues/8733&gt;</code>_)</li>
<li>New resolver: When a requirement is requested both via a direct URL
(<code>req @ URL</code>) and via version specifier with extras (<code>req[extra]</code>), the
resolver will now be able to use the URL to correctly resolve the requirement
with extras. (<code>[#8785](pypa/pip#8785) &lt;https://github.com/pypa/pip/issues/8785&gt;</code>_)</li>
<li>New resolver: Show relevant entries from user-supplied constraint files in the
error message to improve debuggability. (<code>[#9300](pypa/pip#9300) &lt;https://github.com/pypa/pip/issues/9300&gt;</code>_)</li>
<li>Avoid parsing version to make the version check more robust against lousily
debundled downstream distributions. (<code>[#9348](pypa/pip#9348) &lt;https://github.com/pypa/pip/issues/9348&gt;</code>_)</li>
<li><code>--user</code> is no longer suggested incorrectly when pip fails with a permission
error in a virtual environment. (<code>[#9409](pypa/pip#9409) &lt;https://github.com/pypa/pip/issues/9409&gt;</code>_)</li>
<li>Fix incorrect reporting on <code>Requires-Python</code> conflicts. (<code>[#9541](pypa/pip#9541) &lt;https://github.com/pypa/pip/issues/9541&gt;</code>_)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/pypa/pip/commit/2b2a268d25963727c2a1c805de8f0246b9cd63f6"><code>2b2a268</code></a> Bump for release</li>
<li><a href="https://github.com/pypa/pip/commit/ea761a6575f37b90cf89035ee8be3808cf872184"><code>ea761a6</code></a> Update AUTHORS.txt</li>
<li><a href="https://github.com/pypa/pip/commit/2edd3fdf2af2f09dce5085ef0eb54684b4f9bc04"><code>2edd3fd</code></a> Postpone a deprecation to 21.2</li>
<li><a href="https://github.com/pypa/pip/commit/3cccfbf169bd35133ee25d2543659b9c1e262f8c"><code>3cccfbf</code></a> Rename mislabeled news fragment</li>
<li><a href="https://github.com/pypa/pip/commit/21cd124b5d40b510295c201b9152a65ac3337a37"><code>21cd124</code></a> Fix NEWS.rst placeholder position</li>
<li><a href="https://github.com/pypa/pip/commit/e46bdda9711392fec0c45c1175bae6db847cb30b"><code>e46bdda</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/9827">#9827</a> from pradyunsg/fix-git-improper-tag-handling</li>
<li><a href="https://github.com/pypa/pip/commit/0e4938d269815a5bf1dd8c16e851cb1199fc5317"><code>0e4938d</code></a> 📰</li>
<li><a href="https://github.com/pypa/pip/commit/ca832b2836e0bffa7cf95589acdcd71230f5834e"><code>ca832b2</code></a> Don't split git references on unicode separators</li>
<li><a href="https://github.com/pypa/pip/commit/1320bac4ff80d76b8fba2c8b4b4614a40fb9c6c3"><code>1320bac</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/9814">#9814</a> from pradyunsg/revamp-ci-apr-2021-v2</li>
<li><a href="https://github.com/pypa/pip/commit/e9cc23ffd97cb6d66d32dc3ec27cf832524bb33d"><code>e9cc23f</code></a> Skip checks on PRs only</li>
<li>Additional commits viewable in <a href="https://github.com/pypa/pip/compare/21.0.1...21.1">compare view</a></li>
</ul>
</details>
<br />

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pip&package-manager=pip&previous-version=21.0.1&new-version=21.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually

</details>
@YodaEmbedding
Copy link

Solution for Arch users

The way I solved this was to uninstall the offending package (setuptools):

pip uninstall setuptools

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Nov 4, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants