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

virtualenv with --system-site-packages breaks pip's build isolation #6264

Closed
pganssle opened this issue Feb 13, 2019 · 82 comments · Fixed by #11466
Closed

virtualenv with --system-site-packages breaks pip's build isolation #6264

pganssle opened this issue Feb 13, 2019 · 82 comments · Fixed by #11466
Labels
C: PEP 517 impact Affected by PEP 517 processing type: bug A confirmed bug or unintended behavior

Comments

@pganssle
Copy link
Member

pganssle commented Feb 13, 2019

It seems that if you create a virtualenv with --system-site-packages, the system packages (but not the user packages) will be on the PYTHONPATH in the PEP 517 isolated build environment that pip creates (it does not effect python -m pep517.build), and it seems they will be on there with higher precedence than the requirements installed in the build environment. It only affects pip >= 19.0.0.

The most common way I've seen this cause problems is with the new setuptools.build_meta:__legacy__ backend. Since the most recent version of pip requires a recent version of setuptools, if you have an older version of setuptools installed on the system, pip install will fail due to the missing setuptools.build_meta:__legacy__ backend. It is possible to reproduce this by crafting a deliberately bad package and installing it, then creating a wheel for a newer version of the package (which allowed me to test that this failure was actually introduced with pip==19.0.0), but for the MWE we can stick with setuptools.

To reproduce, create a package like this:

cd /tmp
mkdir demo
cd demo
mkdir badpkg

touch badpkg/pyproject.toml
echo 'from setuptools import setup; setup(name="foo", version="0.1.0")' \
    > badpkg/setup.py

Then install an older version of setuptools on your system (can't be --user or in the virtualenv), pip install 'setuptools < 40.8.0' (I did this in a pyenv environment). If your system already has an older version of setuptools on it, you're already good.

Next create a virtualenv with --system-site-packages and activate it:

virtualenv venv --system-site-packages
source venv/bin/activate

Finally try to install badpkg (pip wheel or pip install -t tmp also works to demonstrate the problem):

pip install ./badpkg

You should get a traceback the ends like this:

AttributeError: module 'setuptools.build_meta' has no attribute '__legacy__'

At first I thought this was because the affected packages had too loose bounds on build-system.requires (e.g. requires=["setuptools"]) and that pip was failing to install a more recent version in the isolated environment, but this bug still occurs even if you specify "setuptools>=40.8.0", so I believe it's not a problem at install-time, it's a problem with the path resolution at build time.

At the moment it's unclear if this is a problem with pip or virtualenv, but since it does not affect python -m pep517.build, I'm reporting it here. It could be a combination of both.

CC: @gaborbernat

@pganssle
Copy link
Member Author

Per my Bloomberg colleague @lkollar, it seems that the problem is that pip creates a custom sitecustomize.py file in order to inject itself into the build environment.

Looks to me like it's just blacklisting the system packages with distutils.get_python_lib, which doesn't include the system path added by virtualenv. Seems like pep517.envbuild.BuildEnvironment doesn't have this problem - maybe switch over to using that? Or was there a reason to do it this way?

@boegel
Copy link

boegel commented Feb 26, 2019

I'm also seeing this problem, when installing cryptography 2.5 using Python 3.7.2, even though I'm using the latest setuptools (40.8.0).

What I don't understand is why I'm seeing this even though I'm using pip install --no-build-isolation .... How is that possible if the problem is related to pip's build isolation feature?

@boegel
Copy link

boegel commented Feb 26, 2019

I should also mention that I'm not using virtualenv at all (although maybe somehow the cryptography installation procedure does that somehow?).

@pganssle
Copy link
Member Author

@boegel Can you create a minimal-working example that reproduces this, and include your pip versions? I've never known anyone to be able to trigger this without virtualenv --system-site-packages.

@boegel
Copy link

boegel commented Feb 26, 2019

@pganssle Does this suffice?

Note that this is a self-built Python 3.7.2 from source, in a custom location, not sure if that's relevant to the problem...

$ python -V
Python 3.7.2

$ pip -V
pip 19.0.3 from /prefix/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip-19.0.3-py3.7.egg/pip (python 3.7)

$ easy_install --version
setuptools 40.8.0 from /prefix/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/setuptools-40.8.0-py3.7.egg (Python 3.7)

$ mkdir -p /tmp/$USER/pip_debug
$ cd /tmp/$USER/pip_debug

$ curl -OL https://files.pythonhosted.org/packages/69/ed/5e97b7f54237a9e4e6291b6e52173372b7fa45ca730d36ea90b790c0059a/cryptography-2.5.tar.gz

$ tar xfz cryptography-2.5.tar.gz

$ cd cryptography-2.5

$ pip install --prefix=$PWD --no-deps  --ignore-installed  --no-build-isolation  .
Processing /tmp/user/pip_debug/cryptography-2.5
    Preparing wheel metadata ... error
    Complete output from command /prefix/Python/3.7.2-GCCcore-8.2.0/bin/python /prefix/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip-19.0.3-py3.7.egg/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel /tmp/tmpkwc5sc4e:
    Traceback (most recent call last):
      File "/prefix/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip-19.0.3-py3.7.egg/pip/_vendor/pep517/_in_process.py", line 207, in <module>
        main()
      File "/prefix/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip-19.0.3-py3.7.egg/pip/_vendor/pep517/_in_process.py", line 197, in main
        json_out['return_val'] = hook(**hook_input['kwargs'])
      File "/prefix/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip-19.0.3-py3.7.egg/pip/_vendor/pep517/_in_process.py", line 62, in prepare_metadata_for_build_wheel
        backend = _build_backend()
      File "/prefix/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip-19.0.3-py3.7.egg/pip/_vendor/pep517/_in_process.py", line 39, in _build_backend
        obj = getattr(obj, path_part)
    AttributeError: module 'setuptools.build_meta' has no attribute '__legacy__'

    ----------------------------------------
Command "/prefix/Python/3.7.2-GCCcore-8.2.0/bin/python /prefix/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip-19.0.3-py3.7.egg/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel /tmp/tmpkwc5sc4e" failed with error code 1 in /tmp/pip-req-build-q9knj58j

This is on CentOS 7.6.1810, with only python 2.x installed on the system. We do have an old setuptools in the OS as well, but I think that one is irrelevant since that's only for Python 2.

$ rpm -qa | grep ^python[0-9]*-[0-9]
python-2.7.5-76.el7.x86_64
$ rpm -qa | grep setuptools
python-setuptools-0.9.8-7.el7.noarch

@boegel
Copy link

boegel commented Feb 26, 2019

I should also mention that --no-use-pep517 fixes the problem for me.

@pfmoore
Copy link
Member

pfmoore commented Feb 26, 2019

pip 19.0.3 from /prefix/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip-19.0.3-py3.7.egg/pip (python 3.7)

Looks like your pip (and your setuptools) have been installed as eggs, presumably using easy_install. This is obsolete, can you try with a copy of pip installed using pip?

@boegel
Copy link

boegel commented Mar 7, 2019

@pfmoore Same problem when pip and setuptools were installed with pip, when using latest cryptography from PyPI. Note that there's no other Python 3 installation on the system (and hence no other setuptools either).

$ which python
/prefix/software/Python/3.7.2-GCCcore-8.2.0/bin/python
$ python -V
Python 3.7.2

$ pip -V
pip 19.0.3 from /prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip (python 3.7)

$ easy_install --version
setuptools 40.8.0 from /prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages (Python 3.7)

$ mkdir -p /tmp/$USER/pip_debug
$ cd /tmp/$USER/pip_debug
$ curl -OL https://files.pythonhosted.org/packages/07/ca/bc827c5e55918ad223d59d299fff92f3563476c3b00d0a9157d9c0217449/cryptography-2.6.1.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  480k  100  480k    0     0   755k      0 --:--:-- --:--:-- --:--:--  754k

$ tar xfz cryptography-2.6.1.tar.gz
$ cd cryptography-2.6.1

$ pip install --prefix=/tmp/$USER --no-deps  --ignore-installed  --no-build-isolation  .
Processing /tmp/myuser/pip_debug/cryptography-2.6.1
    Preparing wheel metadata ... error
    Complete output from command /prefix/software/Python/3.7.2-GCCcore-8.2.0/bin/python3.7 /prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel /tmp/tmpb28ucw3_:
    Traceback (most recent call last):
      File "/prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 207, in <module>
        main()
      File "/prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 197, in main
        json_out['return_val'] = hook(**hook_input['kwargs'])
      File "/prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 62, in prepare_metadata_for_build_wheel
        backend = _build_backend()
      File "/prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 39, in _build_backend
        obj = getattr(obj, path_part)
    AttributeError: module 'setuptools.build_meta' has no attribute '__legacy__'

    ----------------------------------------
Command "/prefix/software/Python/3.7.2-GCCcore-8.2.0/bin/python3.7 /prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel /tmp/tmpb28ucw3_" failed with error code 1 in /tmp/pip-req-build-s_w63g1g

Works fine when using --no-use-pep517:

$ pip install --prefix=/tmp/$USER --no-deps  --ignore-installed  --no-build-isolation  . --no-use-pep517
Processing /tmp/myuser/pip_debug/cryptography-2.6.1
Building wheels for collected packages: cryptography
  Building wheel for cryptography (setup.py) ...
...

@pfmoore
Copy link
Member

pfmoore commented Mar 7, 2019

module 'setuptools.build_meta' has no attribute 'legacy'

That indicates you're not picking up setuptools 40.8.0 - see here

Try running

import setuptools.build_meta
print(setuptools.build_meta.__legacy__)

You should get something like <setuptools.build_meta._BuildMetaLegacyBackend object at 0x000000000401B2E8>. If you're not, then there's something wrong with your system setuptools. If you are, your build environment is not picking up the same packages as your system Python - in spite of your assertion that there's only the one setuptools installed on your system :-(

Also, the fact that you're using --prefix may be relevant here - I don't know how that interacts (if at all) with build environments. Can you reproduce this issue without --prefix?

@gaborbernat
Copy link

@pfmoore if virtualenv inherits the system site package (and that has a setuptoools before 40.8.0) the pip install of the setuptools build dependency is ignored (as pip does not check the version of what is installed unless -U is passed, and says any setuptools satisfies the install requirement); therefore once pip tries to get the build backend the above failure is thrown. I don't think there needs to be anything wrong with system python to fall into this issue. pip should make sure to never-ever create an isolated build environment that inherits from the system site package, which is not the case at the moment.

@pfmoore
Copy link
Member

pfmoore commented Mar 7, 2019

if virtualenv inherits the system site package

Presumably when --no-build-isolation is specified? An isolated build ignores the existing installation.

(and that has a setuptoools before 40.8.0)

Well, the point of --no-build-isolation is that the user is agreeing to set up the correct build environment, so that seems like it's a simple case of user error.

However, in this case @boegel is claiming that he has setuptools 40.8.0 installed, and no other setuptools is present. If that's the case, and his setuptools doesn't contain build_meta.__legacy__, then that setuptools installation is somehow broken, because 40.8.0 does contain that backend.

My suspicion is that @boegel is actually mistaken, and there's another copy of setuptools lingering around somewhere, which is getting picked up and is confusing things. The other possibility is that there's a bug somewhere - but if that is the case, then we're currently struggling to reduce the example to something that can easily reproduce/demonstrate that bug.

pip should make sure to never-ever create an isolated build environment that inherits from the system site package

Well, yes, that's sort of the definition of "isolated" :-) But I'm not sure how relevant that is in this case, where --no-build-isolation is set.

which is not the case at the moment

That's what @pganssle is saying in the original post in this thread, yes. But I'm responding to @boegel, who is claiming that he can reproduce the problem without a virtualenv, using --no-build-isolation.

If @boegel's problem turns out to be real, then I don't think it's related to this one (there's too many differences in the steps to reproduce it). So it should probably be a separate issue. But I'd be interested to understand why he thinks it is the same issue...

@boegel
Copy link

boegel commented Mar 7, 2019

Dug a little further, it looks it's indeed a case of a broken setuptools installation, in some sense...

First, I should clarify my statement w.r.t. not having another setuptools installed. I should clarify that I mean that there's no other setuptools installed for Python 3.x. There is one for Python 2 (which is available in the OS), I'm assuming that one will never be picked up by Python 3.

That said, I'm pretty sure the right setuptools is being picked up:

$ python -c "import setuptools; print(setuptools.__file__); print(setuptools.version.__version__)"
/prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/setuptools/__init__.py
40.8.0

Yet:

$ python -c "import setuptools.build_meta; print(setuptools.build_meta.__file__); print(setuptools.build_meta.__legacy__)"
/prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/setuptools/build_meta.py
Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: module 'setuptools.build_meta' has no attribute '__legacy__'

So I do have setuptools 40.8.0, but no __legacy__ in setuptools.build_meta?!

This sheds some light on it:

ls -ld /prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/setuptools*
drwxr-xr-x 6 myuser myuser 4096 Mar  7 18:48 /prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/setuptools
drwxr-xr-x 2 myuser myuser 4096 Mar  7 11:56 /prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/setuptools-40.6.2.dist-info
drwxr-xr-x 2 myuser myuser 4096 Mar  7 11:57 /prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/setuptools-40.8.0-py3.7.egg-info
drwxr-xr-x 3 myuser myuser 4096 Mar  7 11:58 /prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/setuptools_scm
drwxr-xr-x 2 myuser myuser 4096 Mar  7 11:58 /prefix/software/Python/3.7.2-GCCcore-8.2.0/lib/python3.7/site-packages/setuptools_scm-3.2.0.dist-info

The setuptools-40.6.2.dist-info looks very suspicious, it seems like I somehow ended up with a frankenbuild of setuptools-40.6.2 (which doesn't have __legacy__ in setuptools.build_meta yet) and setuptools-40.8.0?! Ugh...

I got redirect to this issue via pypa/setuptools#1694, which shows the exact same error I'm running into, so I naively assumed it's the same problem.

It seems in my case it's indeed because of a corrupted setuptools though, my apologies for the noise...

@pfmoore
Copy link
Member

pfmoore commented Mar 7, 2019

No problem, glad we got to the bottom of it!

@Lawouach
Copy link

Lawouach commented Mar 8, 2019

Hey,

I'm running into this issue as well and I'm thoroughly confused. As a mere user, it looks totally broken with no clear path of understanding how I'm doing anything wrong.

@Lawouach
Copy link

Lawouach commented Mar 8, 2019

Well, having said that. I ended up removing the system-wide setuptools package and now local pip doesn't complain.

@tgs
Copy link
Contributor

tgs commented Mar 14, 2019

I'm encountering the same issue, I think. My organization defaults virtualenvs to --system-site-packages, and the globally installed setuptools is 40.4.3. I cloned the pip git repo, and then:

In a system-site-packages virtualenv, pip install ./pip/ gives the AttributeError: module 'setuptools.build_meta' has no attribute '__legacy__'.

In a virtualenv with no-site-packages, pip install ./pip/ works correctly.

I think I agree with @gaborbernat that it would be better for "build isolation" to include ignoring --system-site-packages. Or maybe there's at least some way to give a better error message?

@webknjaz
Copy link
Member

webknjaz commented Apr 2, 2019

FTR I'm hitting this with tox + system-site-packages with setuptools>=40.8.0 in pyproject.toml under Python 2.7.15. I was actually hitting pypa/setuptools#1136 originally (which I knew was fixed a while back) and only after some time of playing around with removing pyproject.toml and then just playing with --no-build-isolation I've found this one...

Couldn't figure it out for a while because it was only reproducible in Travis CI which drops you into a virtualenv from the beginning automatically. Had to request debug access to their VMs to nail it down...

@webknjaz
Copy link
Member

webknjaz commented Apr 4, 2019

Okay, now I'm hitting this in readthedocs/readthedocs.org#5572 somehow.

@webknjaz
Copy link
Member

webknjaz commented Apr 4, 2019

They use explicit --no-site-packages: https://readthedocs.org/projects/octomachinery/builds/8869252/

@webknjaz
Copy link
Member

webknjaz commented Apr 4, 2019

@pganssle it looks like it's time to remove --system-site-packages from the title. I've already hit two instances of the bug with --no-site-packages.

mlissner added a commit to freelawproject/judge-pics that referenced this issue Apr 22, 2022
This should help shrink our repository down, since it won't
contain a gazillion tweaked and altered files. Full git log
is below up to this point.

-----------

commit d05df139e4434d0bb90e97599bb06015c05b0893 (HEAD -> main, origin/main, origin/HEAD)
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Apr 21 23:20:06 2022 -0700

    feat(docs): Explain how to use URLs

commit 50dbab890e3ed466bd3b36a0938cdb9772050242 (tag: v2.0.3)
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Apr 21 23:14:56 2022 -0700

    feat(pypi): Add long desc

commit 95cdeab87e5ec1591ed32123858c3da92979ec7c
Merge: 2612ffc 16e4c2d
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Apr 21 17:57:57 2022 -0700

    Merge remote-tracking branch 'origin/main'

    # Conflicts:
    #       README.md

commit 2612ffca401ac1569d0b6c6a060dcb56f95dc70d
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Apr 21 17:55:12 2022 -0700

    feat(docs): Update readme

commit 16e4c2db03cb056923e2fa0d450b801b34046644
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Apr 21 17:55:12 2022 -0700

    feat(docs): Update readme

commit c4a1d1272bc12d3ef1444b330e436b27b720b32d
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Apr 21 17:54:59 2022 -0700

    fix(cruft): Delete old files

commit b8d96d50db0e2c745891259d5df1ae97cd6fcadb (tag: v2.0.2)
02:53:15::mlissner@gabbro::~/Programming/archive/Judge Pics Git Backup (View
↪ git log | cat
commit d05df139e4434d0bb90e97599bb06015c05b0893
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Apr 21 23:20:06 2022 -0700

    feat(docs): Explain how to use URLs

commit 50dbab890e3ed466bd3b36a0938cdb9772050242
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Apr 21 23:14:56 2022 -0700

    feat(pypi): Add long desc

commit 95cdeab87e5ec1591ed32123858c3da92979ec7c
Merge: 2612ffc 16e4c2d
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Apr 21 17:57:57 2022 -0700

    Merge remote-tracking branch 'origin/main'

    # Conflicts:
    #       README.md

commit 2612ffca401ac1569d0b6c6a060dcb56f95dc70d
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Apr 21 17:55:12 2022 -0700

    feat(docs): Update readme

commit 16e4c2db03cb056923e2fa0d450b801b34046644
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Apr 21 17:55:12 2022 -0700

    feat(docs): Update readme

commit c4a1d1272bc12d3ef1444b330e436b27b720b32d
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Apr 21 17:54:59 2022 -0700

    fix(cruft): Delete old files

commit b8d96d50db0e2c745891259d5df1ae97cd6fcadb
Author: William Palin <bill@free.law>
Date:   Mon Apr 18 16:57:53 2022 -0400

    Version bump v2.0.2

commit 2491d57d75f735c4ff5081eba650562d3d813380
Author: William Palin <bill@free.law>
Date:   Mon Apr 18 16:52:21 2022 -0400

    feat(search): Add search by judge name

commit 43187483961a544c87d987bdc4976ec9db7be2b0
Author: William Palin <bill@free.law>
Date:   Tue Apr 12 20:27:12 2022 -0400

    fix(workflow): Unwind wrong commit

commit b0977447a96d11e8e3dda32ada3a4136ccde8635
Author: William Palin <bill@free.law>
Date:   Tue Apr 12 20:26:31 2022 -0400

    test(workflow): Debug workflow

commit f69e6d2a9a1adc643ed4fb061f8d2bb939064059
Author: William Palin <bill@free.law>
Date:   Sun Apr 10 13:28:02 2022 -0400

    fix(search): Fix portrait method

commit 16ad9d815b7e329dd6ff87cf986d4acba605816f
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Fri Apr 8 14:52:42 2022 -0700

    feat(v): Release new version

commit 8aae70901fc54fe1204ba7b2e3fa958cd3dd2bef
Merge: 1b8e7f2 9284eb9
Author: Mike Lissner <mlissner@michaeljaylissner.com>
Date:   Fri Apr 8 14:50:37 2022 -0700

    Merge pull request #16 from freelawproject/judge-pics-ii

    Judge Pics refactor

commit 9284eb955f2f5d5ef53d95e31321c156e3e5a16e
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Fri Apr 8 14:48:33 2022 -0700

    refactor(update): Split function and clean up strings

commit af8a78faaba305c6993527ca946dcaa14075a0fa
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Fri Apr 8 14:48:02 2022 -0700

    fix(typing): Convert to enum

    I read the PEP for Literal. It can't handle anything complicated at all except Enums.

commit 85ccf1bb7e1aa96904f0f9ab4438a7c72fe82cb4
Author: William Palin <bill@free.law>
Date:   Fri Apr 8 16:30:31 2022 -0400

    fix(setup.py): Drop photos from pypi release

commit 177ec6c9c4c7756170aeb8dbf386073b57c0894a
Author: William Palin <bill@free.law>
Date:   Fri Apr 8 16:25:30 2022 -0400

    feat(upload): Add pypi release to upload project

commit 15d9b10ef7bbacc69a8ba61a45aa1cfd3f1f68b4
Author: William Palin <bill@free.law>
Date:   Fri Apr 8 16:24:23 2022 -0400

    feat(upload): Add pypi release to upload project

commit e1965894a05dadea57c9efb38d8ef6ad11a3baf3
Author: William Palin <bill@free.law>
Date:   Fri Apr 8 15:39:10 2022 -0400

    chore(project): Black

commit 7ea39a958ab55880b3441c010f61f8f7798dcd9f
Author: William Palin <bill@free.law>
Date:   Fri Apr 8 15:36:53 2022 -0400

    chore(project): Black

commit 3e159c30728045ee3680314f630f7b5fa1c9b2dc
Author: William Palin <bill@free.law>
Date:   Fri Apr 8 15:35:47 2022 -0400

    feat(project): Update and revamp project

    Drop different sizes and just store original
    Upload remainder to portraits repository

commit c744b9f9a6ca7c78d1cae74830dd1975d0bb9bcf
Author: William Palin <bill@free.law>
Date:   Fri Apr 8 12:09:52 2022 -0400

    feat(tests): Add new test and bump python versions

commit 2400fe4674c0a9704cb422dfda2393f6e74daecb
Author: William Palin <bill@free.law>
Date:   Fri Apr 8 12:09:18 2022 -0400

    feat(req): Update req

commit ad35d20bc784e672291a2086e6328c5a52f6f1e3
Author: William Palin <bill@free.law>
Date:   Fri Apr 8 12:09:05 2022 -0400

    feat(data): Drop non original sizes

commit 1b8e7f20619e486822aecdda04ee2aa84d5501ef
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Mon Aug 23 17:05:03 2021 -0700

    feat(docs): Update readme with docker notes

commit c4ed17a1128961e924cbe8e3ed88af50d18ab0d2
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Aug 19 17:53:05 2021 -0700

    Version bump

commit 5252ee8fee7ccc6e873e35e915d3b704137d6b19
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu Aug 19 17:49:22 2021 -0700

    fix(photo): Update name of file to fix sentry bug

commit 695cf96bf9718046bec2a219265cfcaafc1b8379
Author: vvilliam <wpalin@gmail.com>
Date:   Fri Oct 16 16:30:30 2020 -0400

    fix(dockerfile): Update dockerfile to slim versions

commit eec437894a1fc8d9b311de2a94005a9a832adf43
Author: vvilliam <wpalin@gmail.com>
Date:   Fri Oct 16 16:20:41 2020 -0400

    fix(dockerfile): Update dockerfile to slim versions

commit dbb478b0bbe28e70fad26a0dc7c098ef1e3ad729
Merge: 3e67e26 c630e89
Author: vvilliam <wpalin@gmail.com>
Date:   Fri Oct 16 14:30:50 2020 -0400

    Merge branch 'master' of https://github.com/freelawproject/judge-pics

commit 3e67e26e323ab053f32713003788444b1be52c3a
Author: vvilliam <wpalin@gmail.com>
Date:   Fri Oct 16 14:30:23 2020 -0400

    Version bump to 1.2.0

commit f734125533c09071c9afd58de9923bff5d6dfc70
Author: vvilliam <wpalin@gmail.com>
Date:   Fri Oct 16 14:30:09 2020 -0400

    feat(dockerfile): Upgrade docker image to py3.8

commit c630e89eadb6b18df42a111eab1443af43374887
Merge: 3bc2ff7 f7f1f7f
Author: Mike Lissner <mike@free.law>
Date:   Wed Oct 7 14:02:41 2020 -0700

    Merge pull request #13 from drewsilcock/feature/use-official-black-github-action

    Feature: Use official Black GitHub Action to check formatting.

commit f7f1f7fb23eca413479d209d2b134e509ef5db14
Author: Drew Silcock <drew.silcock@stfc.ac.uk>
Date:   Wed Oct 7 22:00:00 2020 +0100

    feat(CI): Use official Black GitHub Action to check formatting.

commit 3bc2ff7b0953e2d21735ca5c3f1f96fe2a0e5faa
Author: vvilliam <wpalin@gmail.com>
Date:   Thu Sep 17 14:01:43 2020 -0400

    feat(post_push): Update post_push

commit 2366d7ac77c6fbae16923665d4c98faa4eea5662
Author: vvilliam <wpalin@gmail.com>
Date:   Thu Sep 17 13:45:50 2020 -0400

    refactor(vesion.txt): Add version.txt for cleaner versioning

commit a5ab4cc4ababfb3f7e8cc2b531161aeb0a381d2d
Author: William Palin <flooie@users.noreply.github.com>
Date:   Wed Sep 9 16:01:14 2020 -0400

    feat(post_push): Init post_push

    Add hook for docker hub

commit 621d7e434c4b1738cf5cbc86e72fc542a5ce6866
Author: William Palin <flooie@users.noreply.github.com>
Date:   Wed Sep 9 16:00:03 2020 -0400

    feat(Dockerfile): Init Dockerfile

commit 319687f7dd0025010ca41a5dbf914f241c6b7fc7
Merge: b112364 5647155
Author: Mike Lissner <mike@free.law>
Date:   Thu Aug 27 13:33:30 2020 -0700

    Merge pull request #12 from freelawproject/imgbot

    [ImgBot] Optimize images

commit 564715550e9885b62d4ae8e9a0ac9497eba8858f
Author: ImgBotApp <ImgBotHelp@gmail.com>
Date:   Thu Aug 27 20:12:49 2020 +0000

    [ImgBot] Optimize images

    *Total -- 92,296.38kb -> 84,369.10kb (8.59%)

    /judge_pics/data/orig/durham-robert.jpeg -- 5,052.66kb -> 4,498.76kb (10.96%)
    /judge_pics/data/orig/phillips-allen.jpeg -- 9,095.57kb -> 8,106.50kb (10.87%)
    /judge_pics/data/orig/seymour-deana.jpeg -- 8,350.29kb -> 7,547.60kb (9.61%)
    /judge_pics/data/orig/baker-josh.jpeg -- 6,887.05kb -> 6,225.95kb (9.6%)
    /judge_pics/data/orig/switzer-kenneth.jpeg -- 4,594.62kb -> 4,162.99kb (9.39%)
    /judge_pics/data/orig/addington-brian.jpeg -- 5,354.65kb -> 4,852.45kb (9.38%)
    /judge_pics/data/orig/tipps-dale.jpeg -- 6,417.37kb -> 5,853.38kb (8.79%)
    /judge_pics/data/orig/johnson-pamela.jpeg -- 6,188.81kb -> 5,648.67kb (8.73%)
    /judge_pics/data/orig/luttrell-amber.jpeg -- 10,789.61kb -> 9,868.55kb (8.54%)
    /judge_pics/data/orig/headrick-audrey.jpeg -- 9,280.30kb -> 8,489.81kb (8.52%)
    /judge_pics/data/orig/lowe-lisa.jpeg -- 9,099.11kb -> 8,349.15kb (8.24%)
    /judge_pics/data/orig/hensley-david.jpeg -- 104.59kb -> 98.77kb (5.56%)
    /judge_pics/data/512/wyatt-tom.jpeg -- 112.41kb -> 106.35kb (5.39%)
    /judge_pics/data/512/godkin-pele.jpeg -- 183.63kb -> 174.23kb (5.12%)
    /judge_pics/data/512/tipps-dale.jpeg -- 142.35kb -> 135.16kb (5.05%)
    /judge_pics/data/512/phillips-allen.jpeg -- 111.37kb -> 105.95kb (4.87%)
    /judge_pics/data/512/baker-josh.jpeg -- 147.16kb -> 140.07kb (4.82%)
    /judge_pics/data/512/addington-brian.jpeg -- 141.09kb -> 134.33kb (4.79%)
    /judge_pics/data/512/switzer-kenneth.jpeg -- 143.96kb -> 137.10kb (4.77%)
    /judge_pics/data/512/durham-robert.jpeg -- 155.05kb -> 147.88kb (4.63%)
    /judge_pics/data/orig/conner-tim.jpeg -- 119.02kb -> 113.53kb (4.62%)
    /judge_pics/data/512/seymour-deana.jpeg -- 121.23kb -> 115.66kb (4.59%)
    /judge_pics/data/256/godkin-pele.jpeg -- 48.02kb -> 45.82kb (4.58%)
    /judge_pics/data/512/headrick-audrey.jpeg -- 129.50kb -> 123.64kb (4.53%)
    /judge_pics/data/512/lowe-lisa.jpeg -- 156.16kb -> 149.12kb (4.51%)
    /judge_pics/data/256/tipps-dale.jpeg -- 38.90kb -> 37.18kb (4.43%)
    /judge_pics/data/512/johnson-pamela.jpeg -- 145.72kb -> 139.42kb (4.33%)
    /judge_pics/data/512/luttrell-amber.jpeg -- 143.19kb -> 137.06kb (4.28%)
    /judge_pics/data/256/wyatt-tom.jpeg -- 31.07kb -> 29.74kb (4.27%)
    /judge_pics/data/256/addington-brian.jpeg -- 38.80kb -> 37.17kb (4.2%)
    /judge_pics/data/256/seymour-deana.jpeg -- 35.02kb -> 33.59kb (4.07%)
    /judge_pics/data/256/baker-josh.jpeg -- 41.12kb -> 39.46kb (4.05%)
    /judge_pics/data/256/luttrell-amber.jpeg -- 39.66kb -> 38.09kb (3.96%)
    /judge_pics/data/256/switzer-kenneth.jpeg -- 39.56kb -> 37.99kb (3.96%)
    /judge_pics/data/256/phillips-allen.jpeg -- 32.14kb -> 30.88kb (3.91%)
    /judge_pics/data/256/lowe-lisa.jpeg -- 42.60kb -> 41.04kb (3.66%)
    /judge_pics/data/256/johnson-pamela.jpeg -- 40.03kb -> 38.57kb (3.65%)
    /judge_pics/data/256/durham-robert.jpeg -- 41.14kb -> 39.66kb (3.6%)
    /judge_pics/data/256/headrick-audrey.jpeg -- 35.47kb -> 34.20kb (3.59%)
    /judge_pics/data/orig/wyatt-tom.jpeg -- 8,348.90kb -> 8,050.49kb (3.57%)
    /judge_pics/data/512/bratton-sam-1888-08-19.jpeg -- 25.19kb -> 24.50kb (2.71%)
    /judge_pics/data/128/godkin-pele.jpeg -- 14.02kb -> 13.68kb (2.42%)
    /judge_pics/data/256/nalbandian-john-1969.jpeg -- 17.22kb -> 16.82kb (2.34%)
    /judge_pics/data/128/tipps-dale.jpeg -- 11.15kb -> 10.92kb (2.02%)
    /judge_pics/data/128/switzer-kenneth.jpeg -- 11.47kb -> 11.25kb (1.97%)
    /judge_pics/data/128/seymour-deana.jpeg -- 11.08kb -> 10.87kb (1.93%)
    /judge_pics/data/256/warrington-john-1844-07-22.jpeg -- 8.42kb -> 8.27kb (1.77%)
    /judge_pics/data/128/johnson-pamela.jpeg -- 11.92kb -> 11.73kb (1.62%)
    /judge_pics/data/128/addington-brian.jpeg -- 11.42kb -> 11.25kb (1.54%)
    /judge_pics/data/128/baker-josh.jpeg -- 12.06kb -> 11.88kb (1.5%)
    /judge_pics/data/128/lowe-lisa.jpeg -- 12.84kb -> 12.65kb (1.49%)
    /judge_pics/data/128/luttrell-amber.jpeg -- 12.14kb -> 11.97kb (1.42%)
    /judge_pics/data/512/warrington-john-1844-07-22.jpeg -- 23.35kb -> 23.04kb (1.35%)
    /judge_pics/data/256/bratton-sam-1888-08-19.jpeg -- 7.80kb -> 7.70kb (1.3%)
    /judge_pics/data/512/conner-tim.jpeg -- 23.20kb -> 22.95kb (1.08%)
    /judge_pics/data/128/durham-robert.jpeg -- 11.42kb -> 11.29kb (1.07%)
    /judge_pics/data/128/wyatt-tom.jpeg -- 9.72kb -> 9.63kb (0.99%)
    /judge_pics/data/128/phillips-allen.jpeg -- 10.12kb -> 10.03kb (0.91%)
    /judge_pics/data/128/headrick-audrey.jpeg -- 10.72kb -> 10.63kb (0.84%)
    /judge_pics/data/512/hensley-david.jpeg -- 19.45kb -> 19.34kb (0.56%)
    /judge_pics/data/128/bratton-sam-1888-08-19.jpeg -- 2.76kb -> 2.76kb (0.07%)

    Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>

commit b112364da8d0e2fed131c1e0a5d8a2819c3f3a71
Author: vvilliam <wpalin@gmail.com>
Date:   Thu Aug 27 16:09:41 2020 -0400

    style(Black Changes): Black updated req. reformat of old files

commit 120866b80b42d4c1395dd2b298955c1d6735f2d3
Author: vvilliam <wpalin@gmail.com>
Date:   Thu Aug 27 16:00:21 2020 -0400

    feat(judges.json): Add new TN workers comp judges provided by court

commit 9d3860c0823683198e7ea30d3d9923abc0ea050d
Author: vvilliam <wpalin@gmail.com>
Date:   Thu Aug 27 15:49:15 2020 -0400

    feat(judges.json): Add TN workers comp judges provided by court

commit 5a94bd879edd1a822b26d85fff76f09f75e8e41d
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 23:35:56 2020 -0700

    fix(pip): Remove use of pip internals

    See:
     - https://github.com/abertschi/postcards/blob/master/setup.py
     - https://github.com/zdict/zdict/issues/418
     - https://github.com/pypa/pip/issues/8188

commit 95749d3809ec18cea5a140d1105b69419afde4ea
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 23:13:08 2020 -0700

    fix(build): explicit build-backend workaround

    pip issue pypa/pip#6264
    workaround https://github.com/pypa/setuptools/issues/1694#issuecomment-466010982
    see also https://github.com/httplib2/httplib2/commit/cb2940a5046c34b6c3568054e8679ae064da4f72

commit ad450cdca8825f2135655e731b643aaa0d211f31
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 23:05:06 2020 -0700

    feat(readme): Add notes about versions

commit 7ec31f66b4aa66325f3111f080ce44e41229fd95
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 22:46:52 2020 -0700

    feat(ci): Remove travis.yml file

commit f31d223b13f2eba3b81b701b1546737637aad29e
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 22:43:46 2020 -0700

    fix(py3): lxml doesn't work in py3.7 and above

    See: https://stackoverflow.com/questions/53402747/how-to-install-lxml4-0-with-python3-7-on-amazon-linux-2

commit 678984e430d055b7871b9625a67fb4faf8d8b36b
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 22:38:35 2020 -0700

    fix(py3): Fix import test

commit b3da3591d011e48ca5d773de1ce11cb4f5623e5c
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 17:24:26 2020 -0700

    fix(ci): Add LXML deps for py 3

commit 5d019823c5d91788aaf04995c0466a6d1ac84f8b
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 17:21:18 2020 -0700

    fix(ci): Add LXML deps for py 3

commit ab570db4ef29aedc5d9d956004908970b5d65e58
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 17:15:03 2020 -0700

    fix(black): Try this again

commit da06e74325d1efea15e40c535f0a81b3d3dc4ac4
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 17:13:54 2020 -0700

    feat(reqs): Bump versions

commit 8f467f8af21dba022dfd80497b0bc3f04fd0d5b1
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 17:06:19 2020 -0700

    Version bump

commit 4b192f01d931babd02992b8b8eec3bd474892098
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 17:05:39 2020 -0700

    feat(black): Blacken code

commit e8816d6975a1d24297c635373b6b25023413a60b
Merge: 63842da 5fe9a76
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 17:09:22 2020 -0700

    Merge remote-tracking branch 'origin/master'

commit 63842da53e3ca370bf00b1462604a67269bc4c9e
Author: Michael Lissner <mlissner@michaeljaylissner.com>
Date:   Thu May 28 17:02:20 2020 -0700

    feat(repo): Add standard Python template files

commit 5fe9a76c0959341c9041fa038fb6c81eb7cb8874
Author: Mike Lissner <mike@free.law>
Date:   Thu May 14 09:43:30 2020 -0700

    feat(money): Add sponsorships

commit 64be1e844167873f6972a3a5b53645fb3ba5ad3b
Merge: 7a31547 170dbba
Author: Mike Lissner <mike@free.law>
Date:   Wed Jan 22 10:21:15 2020 -0800

    Merge pull request #9 from freelawproject/imgbot

    [ImgBot] Optimize images

commit 170dbba4b5db29aa2593cc37af88e1728908e195
Author: ImgBotApp <ImgBotHelp@gmail.com>
Date:   Wed Jan 22 06:50:04 2020 +0000

    [ImgBot] Optimize images

    *Total -- 352,913.13kb -> 330,052.92kb (6.48%)

    /judge_pics/data/orig/lucas-malcolm-1927-06-21.jpeg -- 38.99kb -> 27.31kb (29.96%)
    /judge_pics/data/orig/rymer-pamela-1941-01-06.jpeg -- 4.96kb -> 3.51kb (29.2%)
    /judge_pics/data/orig/jordan-adalberto-1961.jpeg -- 450.27kb -> 320.55kb (28.81%)
    /judge_pics/data/orig/hendricks-bruce-1957.jpeg -- 851.53kb -> 608.65kb (28.52%)
    /judge_pics/data/orig/kronstadt-john-1951.jpeg -- 6.07kb -> 4.38kb (27.81%)
    /judge_pics/data/orig/simon-michael-1956.jpeg -- 5.11kb -> 3.71kb (27.4%)
    /judge_pics/data/orig/sullivan-richard-1964.jpeg -- 199.81kb -> 145.42kb (27.22%)
    /judge_pics/data/orig/murguia-mary-1960.jpeg -- 6.00kb -> 4.37kb (27.16%)
    /judge_pics/data/orig/hernandez-marco-1957.jpeg -- 4.97kb -> 3.62kb (27.13%)
    /judge_pics/data/orig/huxman-walter-1887-02-16.jpeg -- 15.29kb -> 11.17kb (26.93%)
    /judge_pics/data/orig/lewis-david-1912-04-25.jpeg -- 16.26kb -> 12.07kb (25.82%)
    /judge_pics/data/orig/gleason-sharon-1957.jpeg -- 8.79kb -> 6.60kb (24.85%)
    /judge_pics/data/orig/phillips-orie-1885-11-20.jpeg -- 18.48kb -> 13.91kb (24.74%)
    /judge_pics/data/orig/doyle-william-1911-02-05.jpeg -- 25.59kb -> 19.27kb (24.69%)
    /judge_pics/data/orig/rives-alexander-1806-06-17.jpeg -- 50.55kb -> 38.21kb (24.41%)
    /judge_pics/data/orig/christen-morgan-1961-12-05.jpeg -- 8.43kb -> 6.38kb (24.37%)
    /judge_pics/data/orig/tunheim-john-1953.jpeg -- 281.46kb -> 214.91kb (23.64%)
    /judge_pics/data/orig/lane-george-1806.jpeg -- 84.74kb -> 64.91kb (23.39%)
    /judge_pics/data/orig/pickett-john-1896-09-03.jpeg -- 18.25kb -> 14.00kb (23.3%)
    /judge_pics/data/orig/fitzgerald-michael-1959.jpeg -- 7.83kb -> 6.01kb (23.26%)
    /judge_pics/data/orig/rice-thomas-1960.jpeg -- 8.24kb -> 6.33kb (23.14%)
    /judge_pics/data/orig/christensen-albert-1905-06-09.jpeg -- 21.13kb -> 16.24kb (23.14%)
    /judge_pics/data/orig/fletcher-betty-1923-03-29.jpeg -- 10.32kb -> 7.99kb (22.58%)
    /judge_pics/data/orig/cotteral-john-1864-09-26.jpeg -- 19.68kb -> 15.25kb (22.48%)
    /judge_pics/data/orig/watford-paul-1967.jpeg -- 9.10kb -> 7.11kb (21.87%)
    /judge_pics/data/orig/daugherty-frederick-1914-08-18.jpeg -- 23.44kb -> 18.35kb (21.74%)
    /judge_pics/data/orig/callahan-consuelo-1950-06-09.jpeg -- 24.55kb -> 19.23kb (21.67%)
    /judge_pics/data/orig/bernal-jesus-1963.jpeg -- 8.34kb -> 6.54kb (21.58%)
    /judge_pics/data/orig/miller-gray-1948.jpeg -- 65.83kb -> 51.69kb (21.47%)
    /judge_pics/data/orig/baird-lourdes-1935.jpeg -- 16.10kb -> 12.65kb (21.43%)
    /judge_pics/data/orig/drain-gershwin-1949.jpeg -- 387.22kb -> 304.38kb (21.39%)
    /judge_pics/data/orig/bea-carlos-1934.jpeg -- 11.42kb -> 8.98kb (21.32%)
    /judge_pics/data/orig/shea-edward-1942.jpeg -- 7.56kb -> 5.97kb (21.11%)
    /judge_pics/data/orig/ginsburg-douglas-1946.jpeg -- 155.44kb -> 123.08kb (20.82%)
    /judge_pics/data/orig/nguyen-jacqueline-1965.jpeg -- 11.00kb -> 8.71kb (20.8%)
    /judge_pics/data/orig/tashima-atsushi-1934.jpeg -- 16.53kb -> 13.10kb (20.75%)
    /judge_pics/data/orig/bury-david-1942.jpeg -- 9.32kb -> 7.40kb (20.6%)
    /judge_pics/data/orig/crow-sam-1926.jpeg -- 10.88kb -> 8.66kb (20.4%)
    /judge_pics/data/orig/carney-cormac-1959.jpeg -- 13.98kb -> 11.12kb (20.4%)
    /judge_pics/data/orig/trott-stephen-1939.jpeg -- 16.90kb -> 13.47kb (20.33%)
    /judge_pics/data/orig/friendly-henry-1903-07-03.jpeg -- 1,051.89kb -> 840.30kb (20.12%)
    /judge_pics/data/orig/souter-david-1939-09-17.jpeg -- 86.76kb -> 69.50kb (19.89%)
    /judge_pics/data/orig/blackmun-harry-1908-11-12.jpeg -- 86.13kb -> 69.00kb (19.88%)
    /judge_pics/data/orig/campbell-david-1952.jpeg -- 9.80kb -> 7.85kb (19.86%)
    /judge_pics/data/orig/friedman-bernard-1943.jpeg -- 90.27kb -> 72.39kb (19.8%)
    /judge_pics/data/orig/selna-james-1945.jpeg -- 9.53kb -> 7.65kb (19.75%)
    /judge_pics/data/orig/martinez-ricardo-1951.jpeg -- 14.07kb -> 11.34kb (19.4%)
    /judge_pics/data/orig/fischer-dale-1951.jpeg -- 11.45kb -> 9.23kb (19.36%)
    /judge_pics/data/orig/suko-lonny-1943.jpeg -- 10.13kb -> 8.18kb (19.27%)
    /judge_pics/data/orig/gaughan-patricia-1953.jpeg -- 327.69kb -> 265.13kb (19.09%)
    /judge_pics/data/orig/mosman-michael-1956.jpeg -- 16.13kb -> 13.11kb (18.71%)
    /judge_pics/data/orig/martone-frederick-1943.jpeg -- 11.59kb -> 9.45kb (18.45%)
    /judge_pics/data/orig/readler-chad-1972.jpeg -- 13.51kb -> 11.02kb (18.44%)
    /judge_pics/data/orig/murrah-alfred-1904-10-27.jpeg -- 12.94kb -> 10.55kb (18.43%)
    /judge_pics/data/orig/king-samuel-1916-04-13.jpeg -- 30.82kb -> 25.15kb (18.39%)
    /judge_pics/data/orig/thapar-amul-1969.jpeg -- 60.71kb -> 49.59kb (18.33%)
    /judge_pics/data/orig/gilliam-earl-1931-08-17.jpeg -- 15.71kb -> 12.85kb (18.2%)
    /judge_pics/data/orig/gwin-james-1954.jpeg -- 257.79kb -> 211.53kb (17.94%)
    /judge_pics/data/orig/hatter-terry-1933.jpeg -- 18.19kb -> 14.95kb (17.82%)
    /judge_pics/data/orig/nugent-donald-1948.jpeg -- 280.07kb -> 231.08kb (17.49%)
    /judge_pics/data/orig/paul-john-1839-06-30.jpeg -- 149.25kb -> 123.24kb (17.42%)
    /judge_pics/data/orig/sherburne-john-1757.jpeg -- 19.02kb -> 15.77kb (17.07%)
    /judge_pics/data/orig/economus-peter-1943.jpeg -- 16.48kb -> 13.67kb (17.06%)
    /judge_pics/data/orig/oconnor-earl-1922-10-06.jpeg -- 35.76kb -> 29.67kb (17.05%)
    /judge_pics/data/orig/hemphill-robert-1915-05-10.jpeg -- 543.62kb -> 453.60kb (16.56%)
    /judge_pics/data/orig/polster-dan-1951.jpeg -- 176.22kb -> 147.11kb (16.52%)
    /judge_pics/data/orig/bingham-edward-1828-08-13.jpeg -- 4.81kb -> 4.02kb (16.49%)
    /judge_pics/data/orig/ritter-willis-1899-01-24.jpeg -- 16.68kb -> 13.98kb (16.18%)
    /judge_pics/data/orig/sessions-william-1930.jpeg -- 14,492.86kb -> 12,156.66kb (16.12%)
    /judge_pics/data/orig/graham-james-1939.jpeg -- 107.60kb -> 90.42kb (15.97%)
    /judge_pics/data/orig/matia-paul-1937.jpeg -- 93.36kb -> 78.66kb (15.75%)
    /judge_pics/data/orig/sotomayor-sonia-1954.jpeg -- 2,499.61kb -> 2,119.72kb (15.2%)
    /judge_pics/data/orig/filip-mark-1966.jpeg -- 246.55kb -> 210.20kb (14.74%)
    /judge_pics/data/orig/friedman-daniel-1916-02-08.jpeg -- 21.50kb -> 18.36kb (14.63%)
    /judge_pics/data/orig/colloton-steven-1963.jpeg -- 213.03kb -> 181.95kb (14.59%)
    /judge_pics/data/orig/ginsburg-ruth-2.jpeg -- 3,091.60kb -> 2,643.17kb (14.5%)
    /judge_pics/data/orig/lay-donald-1926-08-24.jpeg -- 2.67kb -> 2.28kb (14.42%)
    /judge_pics/data/orig/adamson-william-1854-08-13.jpeg -- 476.24kb -> 407.84kb (14.36%)
    /judge_pics/data/orig/coxe-alfred-1847-05-20.jpeg -- 35.83kb -> 30.73kb (14.24%)
    /judge_pics/data/orig/wright-otis-1944.jpeg -- 15.31kb -> 13.17kb (13.97%)
    /judge_pics/data/orig/illston-susan-1948.jpeg -- 2.67kb -> 2.29kb (13.95%)
    /judge_pics/data/orig/wu-george-1950.jpeg -- 14.91kb -> 12.85kb (13.83%)
    /judge_pics/data/orig/pickering-charles-1937.jpeg -- 16.80kb -> 14.48kb (13.82%)
    /judge_pics/data/orig/zapata-frank-1944.jpeg -- 17.12kb -> 14.76kb (13.77%)
    /judge_pics/data/orig/staton-josephine-1961.jpeg -- 1,288.86kb -> 1,112.38kb (13.69%)
    /judge_pics/data/orig/coxe-alfred-1880-05-07.jpeg -- 75.89kb -> 65.58kb (13.58%)
    /judge_pics/data/orig/wolverton-charles-1851-05-16.jpeg -- 556.32kb -> 481.24kb (13.5%)
    /judge_pics/data/orig/stotler-alicemarie-1942-05-29.jpeg -- 28.02kb -> 24.25kb (13.45%)
    /judge_pics/data/orig/cooper-florence-marie-1940-02-09.jpeg -- 14.03kb -> 12.15kb (13.4%)
    /judge_pics/data/orig/lorenz-myron-1935.jpeg -- 24.69kb -> 21.42kb (13.25%)
    /judge_pics/data/orig/jones-napoleon-1940-08-25.jpeg -- 13.89kb -> 12.06kb (13.15%)
    /judge_pics/data/orig/timlin-robert-1932-07-26.jpeg -- 16.52kb -> 14.36kb (13.08%)
    /judge_pics/data/orig/scalia-antonin-1936-03-11.jpeg -- 2,879.39kb -> 2,504.65kb (13.01%)
    /judge_pics/data/orig/corcoran-howard-1906-01-25.jpeg -- 7.53kb -> 6.55kb (12.96%)
    /judge_pics/data/orig/robreno-eduardo-1945.jpeg -- 1,389.44kb -> 1,211.64kb (12.8%)
    /judge_pics/data/orig/soto-james-1950.jpeg -- 2.81kb -> 2.45kb (12.77%)
    /judge_pics/data/orig/vadas-nandor.jpeg -- 3.32kb -> 2.89kb (12.75%)
    /judge_pics/data/orig/boochever-robert-1917-10-02.jpeg -- 796.76kb -> 695.59kb (12.7%)
    /judge_pics/data/orig/pearson-benita-1963.jpeg -- 57.96kb -> 50.74kb (12.44%)
    /judge_pics/data/orig/boulware-richard-1968.jpeg -- 2.33kb -> 2.04kb (12.33%)
    /judge_pics/data/orig/thomas-edward-1848-08-04.jpeg -- 247.94kb -> 217.58kb (12.25%)
    /judge_pics/data/orig/smith-norman-1949.jpeg -- 11.41kb -> 10.01kb (12.24%)
    /judge_pics/data/orig/katzmann-robert-1953.jpeg -- 2.47kb -> 2.17kb (12.16%)
    /judge_pics/data/orig/jones-richard-1950.jpeg -- 12.75kb -> 11.20kb (12.12%)
    /judge_pics/data/orig/aiken-ann-1951.jpeg -- 2.40kb -> 2.11kb (12.05%)
    /judge_pics/data/orig/walton-reggie-1949-02-08.jpeg -- 42.97kb -> 37.83kb (11.95%)
    /judge_pics/data/orig/oliver-solomon-1947.jpeg -- 47.19kb -> 41.56kb (11.93%)
    /judge_pics/data/orig/tevrizian-dickran-1940.jpeg -- 12.54kb -> 11.04kb (11.92%)
    /judge_pics/data/orig/whaley-robert-1943.jpeg -- 15.91kb -> 14.02kb (11.9%)
    /judge_pics/data/orig/nunley-troy-1964.jpeg -- 212.63kb -> 187.41kb (11.86%)
    /judge_pics/data/orig/brnovich-susan-1968.jpeg -- 1,456.24kb -> 1,283.68kb (11.85%)
    /judge_pics/data/orig/johnson-sterling-1934.jpeg -- 46.22kb -> 40.81kb (11.69%)
    /judge_pics/data/orig/letts-fred-1875-04-26.jpeg -- 5.81kb -> 5.14kb (11.66%)
    /judge_pics/data/orig/king-garr-1936.jpeg -- 21.37kb -> 18.88kb (11.62%)
    /judge_pics/data/orig/hoffman-ogden-1822-10-16.jpeg -- 90.74kb -> 80.22kb (11.59%)
    /judge_pics/data/orig/peterson-rosanna-1951.jpeg -- 13.34kb -> 11.80kb (11.54%)
    /judge_pics/data/orig/takasugi-robert-1930-09-12.jpeg -- 11.90kb -> 10.53kb (11.51%)
    /judge_pics/data/orig/easterbrook-frank-1948.jpeg -- 3,292.69kb -> 2,914.31kb (11.49%)
    /judge_pics/data/orig/leon-richard-1949.jpeg -- 42.46kb -> 37.62kb (11.41%)
    /judge_pics/data/orig/schroeder-mary-1940-12-04.jpeg -- 3,115.66kb -> 2,763.06kb (11.32%)
    /judge_pics/data/orig/fisher-raymond-1939.jpeg -- 3.08kb -> 2.73kb (11.3%)
    /judge_pics/data/orig/ritter-halsted-1868-07-14.jpeg -- 170.42kb -> 151.19kb (11.28%)
    /judge_pics/data/orig/ray-george-1844-02-03.jpeg -- 16.24kb -> 14.41kb (11.27%)
    /judge_pics/data/orig/fisher-dennis-1944.jpeg -- 11.00kb -> 9.78kb (11.09%)
    /judge_pics/data/orig/grosscup-peter-1852-02-15.jpeg -- 621.15kb -> 552.41kb (11.07%)
    /judge_pics/data/orig/gillmor-helen-1942.jpeg -- 19.50kb -> 17.34kb (11.06%)
    /judge_pics/data/orig/cummings-walter-1916-09-29.jpeg -- 48.27kb -> 42.94kb (11.06%)
    /judge_pics/data/orig/wellborn-olin-1843-06-18.jpeg -- 227.79kb -> 202.88kb (10.93%)
    /judge_pics/data/orig/hodges-william-1934.jpeg -- 897.48kb -> 799.36kb (10.93%)
    /judge_pics/data/orig/blatt-solomon-1921.jpeg -- 67.76kb -> 60.40kb (10.86%)
    /judge_pics/data/orig/snow-grant-1959-10-20.jpeg -- 35.02kb -> 31.22kb (10.86%)
    /judge_pics/data/orig/pitman-robert-1962.jpeg -- 44.27kb -> 39.46kb (10.85%)
    /judge_pics/data/orig/taylor-anna-1932.jpeg -- 4.79kb -> 4.28kb (10.76%)
    /judge_pics/data/orig/seeborg-richard-1956.jpeg -- 3.46kb -> 3.09kb (10.71%)
    /judge_pics/data/orig/paul-john-1883-12-09.jpeg -- 21.12kb -> 18.86kb (10.7%)
    /judge_pics/data/orig/pierce-lawrence-1924.jpeg -- 627.39kb -> 560.38kb (10.68%)
    /judge_pics/data/orig/edwards-harry-1940.jpeg -- 89.82kb -> 80.23kb (10.68%)
    /judge_pics/data/orig/robart-james-1947.jpeg -- 7.25kb -> 6.48kb (10.61%)
    /judge_pics/data/orig/marshall-consuelo-1936.jpeg -- 10.11kb -> 9.04kb (10.61%)
    /judge_pics/data/orig/goldsmith-mark-1952.jpeg -- 15.94kb -> 14.26kb (10.58%)
    /judge_pics/data/orig/laws-bolitha-1891-08-22.jpeg -- 6.68kb -> 5.97kb (10.58%)
    /judge_pics/data/orig/davis-michael-1947.jpeg -- 83.93kb -> 75.06kb (10.58%)
    /judge_pics/data/orig/carter-gene-1935-11-01.jpeg -- 11.59kb -> 10.37kb (10.56%)
    /judge_pics/data/orig/gesell-gerhard-1910-06-16.jpeg -- 5.63kb -> 5.04kb (10.55%)
    /judge_pics/data/orig/tallman-richard-1953.jpeg -- 14.77kb -> 13.21kb (10.54%)
    /judge_pics/data/orig/mcnamara-abel-1936-06-09.jpeg -- 3.16kb -> 2.83kb (10.52%)
    /judge_pics/data/orig/murphy-stephen-1962.jpeg -- 40.57kb -> 36.30kb (10.51%)
    /judge_pics/data/orig/marquez-rosemary-1968.jpeg -- 2.99kb -> 2.68kb (10.42%)
    /judge_pics/data/orig/fairbank-valerie-1949.jpeg -- 12.19kb -> 10.92kb (10.42%)
    /judge_pics/data/orig/bastian-stanley-1958.jpeg -- 3.64kb -> 3.26kb (10.39%)
    /judge_pics/data/orig/fogel-jeremy-1949.jpeg -- 3.58kb -> 3.21kb (10.38%)
    /judge_pics/data/orig/molloy-donald-1946.jpeg -- 1,549.81kb -> 1,388.97kb (10.38%)
    /judge_pics/data/orig/goldsborough-thomas-1877-09-16.jpeg -- 5.84kb -> 5.23kb (10.36%)
    /judge_pics/data/orig/clifton-richard-1950.jpeg -- 66.95kb -> 60.02kb (10.36%)
    /judge_pics/data/orig/anello-michael-1943.jpeg -- 41.92kb -> 37.62kb (10.27%)
    /judge_pics/data/orig/kessler-gladys-1938.jpeg -- 35.38kb -> 31.75kb (10.26%)
    /judge_pics/data/orig/webster-john-1877-02-22.jpeg -- 182.21kb -> 163.52kb (10.26%)
    /judge_pics/data/orig/white-jeffrey-1945.jpeg -- 3.42kb -> 3.07kb (10.25%)
    /judge_pics/data/orig/gee-dolly-1959.jpeg -- 7.31kb -> 6.56kb (10.25%)
    /judge_pics/data/orig/field-richard-1803-12-31.jpeg -- 2.66kb -> 2.39kb (10.23%)
    /judge_pics/data/orig/gordon-andrew-1962.jpeg -- 2.80kb -> 2.52kb (10.14%)
    /judge_pics/data/orig/dietrich-frank-1863-01-23.jpeg -- 97.76kb -> 87.88kb (10.11%)
    /judge_pics/data/orig/zipps-jennifer-1964.jpeg -- 20.59kb -> 18.51kb (10.08%)
    /judge_pics/data/orig/james-maria-elena.jpeg -- 3.54kb -> 3.19kb (10.06%)
    /judge_pics/data/orig/keith-damon-1922.jpeg -- 15.96kb -> 14.36kb (10.05%)
    /judge_pics/data/orig/owens-john-1971.jpeg -- 3.15kb -> 2.83kb (10.05%)
    /judge_pics/data/orig/hollzer-harry-1880-11-04.jpeg -- 307.36kb -> 276.58kb (10.02%)
    /judge_pics/data/orig/sanborn-john-1883-11-09.jpeg -- 33.76kb -> 30.39kb (9.97%)
    /judge_pics/data/orig/lawson-david-1951.jpeg -- 7.72kb -> 6.96kb (9.9%)
    /judge_pics/data/orig/jordan-kent-1957.jpeg -- 2.86kb -> 2.58kb (9.89%)
    /judge_pics/data/orig/smith-john-1904-01-25.jpeg -- 22.50kb -> 20.28kb (9.88%)
    /judge_pics/data/orig/olguin-fernando-1961.jpeg -- 2.87kb -> 2.59kb (9.87%)
    /judge_pics/data/orig/preyer-lunsford-1919-01-11.jpeg -- 51.86kb -> 46.75kb (9.86%)
    /judge_pics/data/orig/lanning-william-1849-01-01.jpeg -- 128.49kb -> 115.84kb (9.85%)
    /judge_pics/data/orig/biddle-francis-1886-05-09.jpeg -- 624.76kb -> 563.39kb (9.82%)
    /judge_pics/data/orig/johnson-jed-1888-07-31.jpeg -- 45.04kb -> 40.61kb (9.82%)
    /judge_pics/data/orig/oconnell-beverly-1965.jpeg -- 3.08kb -> 2.78kb (9.82%)
    /judge_pics/data/orig/wilkins-william-1779-12-20.jpeg -- 164.41kb -> 148.40kb (9.74%)
    /judge_pics/data/orig/re-edward-1920-10-14.jpeg -- 113.38kb -> 102.36kb (9.72%)
    /judge_pics/data/orig/boudin-michael-1939.jpeg -- 4,981.71kb -> 4,497.87kb (9.71%)
    /judge_pics/data/orig/walsh-lawrence-1912-01-08.jpeg -- 12.30kb -> 11.11kb (9.7%)
    /judge_pics/data/orig/ekwall-william-1887-06-14.jpeg -- 9.54kb -> 8.62kb (9.69%)
    /judge_pics/data/orig/larson-stephen-1964.jpeg -- 1,337.03kb -> 1,207.51kb (9.69%)
    /judge_pics/data/orig/reeves-danny-1957.jpeg -- 35.03kb -> 31.65kb (9.64%)
    /judge_pics/data/orig/gonzalez-irma-1948.jpeg -- 3.41kb -> 3.08kb (9.63%)
    /judge_pics/data/orig/rudkin-frank-1864-04-23.jpeg -- 20.47kb -> 18.50kb (9.63%)
    /judge_pics/data/orig/graves-james-1953.jpeg -- 497.82kb -> 450.07kb (9.59%)
    /judge_pics/data/orig/pechman-marsha-1951.jpeg -- 5.70kb -> 5.16kb (9.59%)
    /judge_pics/data/orig/kiley-roger-1900-10-23.jpeg -- 123.70kb -> 111.86kb (9.57%)
    /judge_pics/data/orig/lloyd-howard.jpeg -- 3.78kb -> 3.42kb (9.57%)
    /judge_pics/data/orig/odonoghue-daniel-1876-10-15.jpeg -- 7.21kb -> 6.53kb (9.52%)
    /judge_pics/data/orig/jones-nathaniel-1926.jpeg -- 46.81kb -> 42.36kb (9.49%)
    /judge_pics/data/orig/cohn-avern-1924.jpeg -- 20.95kb -> 18.96kb (9.49%)
    /judge_pics/data/orig/dorsey-jennifer-1971.jpeg -- 3.21kb -> 2.90kb (9.47%)
    /judge_pics/data/orig/conti-samuel-1922.jpeg -- 3.69kb -> 3.34kb (9.45%)
    /judge_pics/data/orig/bashant-cynthia-1960.jpeg -- 3.29kb -> 2.98kb (9.43%)
    /judge_pics/data/orig/sandoval-brian-1963.jpeg -- 4,306.65kb -> 3,900.40kb (9.43%)
    /judge_pics/data/orig/wesley-richard-1949-08.jpeg -- 82.73kb -> 74.95kb (9.4%)
    /judge_pics/data/orig/friedland-michelle-1972.jpeg -- 3.23kb -> 2.93kb (9.4%)
    /judge_pics/data/orig/rayfiel-leo-1888-03-22.jpeg -- 103.18kb -> 93.49kb (9.39%)
    /judge_pics/data/orig/clark-charles-1925-09-12.jpeg -- 403.84kb -> 365.99kb (9.37%)
    /judge_pics/data/orig/thomason-robert-1879-05-30.jpeg -- 20.89kb -> 18.94kb (9.35%)
    /judge_pics/data/orig/anderson-stephen-1932.jpeg -- 12.71kb -> 11.52kb (9.34%)
    /judge_pics/data/orig/humphreys-west-1806-08-26.jpeg -- 20.71kb -> 18.78kb (9.32%)
    /judge_pics/data/orig/bunning-david-1966.jpeg -- 9.25kb -> 8.39kb (9.3%)
    /judge_pics/data/orig/anderson-percy-1948.jpeg -- 61.58kb -> 55.86kb (9.29%)
    /judge_pics/data/orig/pray-charles-1868-04-06.jpeg -- 29.17kb -> 26.47kb (9.25%)
    /judge_pics/data/orig/ware-james-1946.jpeg -- 3.67kb -> 3.33kb (9.22%)
    /judge_pics/data/orig/adkins-jesse-1879-04-13.jpeg -- 6.33kb -> 5.74kb (9.21%)
    /judge_pics/data/orig/blake-catherine-1950.jpeg -- 50.38kb -> 45.74kb (9.21%)
    /judge_pics/data/orig/patel-marilyn-1938.jpeg -- 3.90kb -> 3.54kb (9.2%)
    /judge_pics/data/orig/wallace-william-1837-04-14.jpeg -- 288.46kb -> 261.94kb (9.19%)
    /judge_pics/data/orig/jensen-delwen-1928.jpeg -- 3.88kb -> 3.52kb (9.17%)
    /judge_pics/data/orig/wilken-claudia-1949.jpeg -- 478.01kb -> 434.35kb (9.13%)
    /judge_pics/data/orig/curran-edward-1903-05-10.jpeg -- 6.31kb -> 5.73kb (9.13%)
    /judge_pics/data/orig/mendez-john-1955.jpeg -- 7.32kb -> 6.65kb (9.12%)
    /judge_pics/data/orig/ambro-thomas-1949.jpeg -- 6,967.34kb -> 6,333.10kb (9.1%)
    /judge_pics/data/orig/teilborg-james-1942.jpeg -- 3.67kb -> 3.34kb (9.06%)
    /judge_pics/data/orig/jones-paul-1880-11-04.jpeg -- 98.76kb -> 89.81kb (9.06%)
    /judge_pics/data/orig/damrell-frank-1938.jpeg -- 10.39kb -> 9.45kb (9.03%)
    /judge_pics/data/orig/proctor-james-1882-09-04.jpeg -- 7.28kb -> 6.62kb (8.99%)
    /judge_pics/data/orig/wilson-james-1874-06-21.jpeg -- 1,139.44kb -> 1,037.08kb (8.98%)
    /judge_pics/data/orig/leamy-james-1892-01-16.jpeg -- 4.35kb -> 3.96kb (8.96%)
    /judge_pics/data/orig/angell-alexis-1857-04-26.jpeg -- 238.42kb -> 217.09kb (8.95%)
    /judge_pics/data/orig/phipps-peter-1973.jpeg -- 2,728.08kb -> 2,483.99kb (8.95%)
    /judge_pics/data/orig/buckley-james-1923.jpeg -- 16.95kb -> 15.43kb (8.94%)
    /judge_pics/data/orig/locke-james-1837-10-30.jpeg -- 190.00kb -> 173.03kb (8.93%)
    /judge_pics/data/orig/jackson-thomas-1937-01-10.jpeg -- 6.00kb -> 5.47kb (8.93%)
    /judge_pics/data/orig/tuchi-john-1964.jpeg -- 3.44kb -> 3.13kb (8.93%)
    /judge_pics/data/orig/whipple-dean-1938.jpeg -- 127.38kb -> 116.02kb (8.92%)
    /judge_pics/data/orig/hand-augustus-1869-07-26.jpeg -- 85.49kb -> 77.87kb (8.91%)
    /judge_pics/data/orig/oconnor-sandra-1930-03-26.jpeg -- 1,017.47kb -> 926.89kb (8.9%)
    /judge_pics/data/orig/wake-neil-1948.jpeg -- 5.19kb -> 4.73kb (8.84%)
    /judge_pics/data/orig/kirkland-james-1903-02-15.jpeg -- 6.49kb -> 5.92kb (8.81%)
    /judge_pics/data/orig/revercomb-george-1929-06-03.jpeg -- 6.01kb -> 5.48kb (8.81%)
    /judge_pics/data/orig/barksdale-alfred-1892-07-17.jpeg -- 33.02kb -> 30.11kb (8.8%)
    /judge_pics/data/orig/kay-alan-1932.jpeg -- 78.13kb -> 71.26kb (8.79%)
    /judge_pics/data/orig/browning-james-1918-10-01.jpeg -- 43.38kb -> 39.57kb (8.77%)
    /judge_pics/data/orig/tamm-edward-1906-04-21.jpeg -- 6.66kb -> 6.07kb (8.77%)
    /judge_pics/data/orig/jackson-ketanji-1970.jpeg -- 766.58kb -> 699.42kb (8.76%)
    /judge_pics/data/orig/chesney-maxine-1942.jpeg -- 4.09kb -> 3.73kb (8.74%)
    /judge_pics/data/orig/piersol-lawrence-1940.jpeg -- 686.79kb -> 626.88kb (8.72%)
    /judge_pics/data/orig/wiggins-charles-1927-12-03.jpeg -- 14.79kb -> 13.50kb (8.72%)
    /judge_pics/data/orig/fitzhenry-louis-1870-01-13.jpeg -- 1,338.56kb -> 1,222.10kb (8.7%)
    /judge_pics/data/orig/rodriguez-joseph-1930.jpeg -- 11.98kb -> 10.94kb (8.7%)
    /judge_pics/data/orig/robinson-aubrey-1922-03-30.jpeg -- 8.28kb -> 7.56kb (8.69%)
    /judge_pics/data/orig/snyder-christina-1947.jpeg -- 5.16kb -> 4.71kb (8.65%)
    /judge_pics/data/orig/jorgenson-cindy-1953.jpeg -- 80.11kb -> 73.19kb (8.63%)
    /judge_pics/data/orig/dick-shelly-1960.jpeg -- 11.70kb -> 10.69kb (8.62%)
    /judge_pics/data/orig/wyche-charles-1885-07-07.jpeg -- 685.08kb -> 626.00kb (8.62%)
    /judge_pics/data/orig/van-sickle-frederick-1943.jpeg -- 31.14kb -> 28.45kb (8.62%)
    /judge_pics/data/orig/hickenlooper-smith-1880-02-13.jpeg -- 22.00kb -> 20.11kb (8.6%)
    /judge_pics/data/orig/allen-michael-1949-12-16.jpeg -- 28.45kb -> 26.00kb (8.59%)
    /judge_pics/data/orig/brady-james-1944.jpeg -- 12.40kb -> 11.34kb (8.58%)
    /judge_pics/data/orig/bryant-vanessa-1954.jpeg -- 23.62kb -> 21.60kb (8.57%)
    /judge_pics/data/orig/thacher-thomas-1881-09-10.jpeg -- 5.11kb -> 4.67kb (8.55%)
    /judge_pics/data/orig/kim-sallie.jpeg -- 227.05kb -> 207.67kb (8.54%)
    /judge_pics/data/orig/gabriel-richard-1962-03-03.jpeg -- 43.55kb -> 39.85kb (8.5%)
    /judge_pics/data/orig/martineau-john-1873-12-02.jpeg -- 1,221.50kb -> 1,118.13kb (8.46%)
    /judge_pics/data/orig/whyte-ronald-1942.jpeg -- 3.93kb -> 3.60kb (8.45%)
    /judge_pics/data/orig/rogers-henry-1853-10-10.jpeg -- 698.08kb -> 639.17kb (8.44%)
    /judge_pics/data/orig/vanbebber-george-1931-10-21.jpeg -- 6.98kb -> 6.39kb (8.43%)
    /judge_pics/data/orig/nalbandian-john-1969.jpeg -- 21.95kb -> 20.10kb (8.43%)
    /judge_pics/data/orig/ross-john-1878-03-09.jpeg -- 419.73kb -> 384.39kb (8.42%)
    /judge_pics/data/orig/conkling-alfred-1789-10-12.jpeg -- 225.48kb -> 206.50kb (8.42%)
    /judge_pics/data/orig/bone-homer-1883-01-25.jpeg -- 13.52kb -> 12.39kb (8.4%)
    /judge_pics/data/orig/martin-james-1846-09-13.jpeg -- 40.29kb -> 36.91kb (8.39%)
    /judge_pics/data/orig/mcnary-john-1867-01-31.jpeg -- 90.60kb -> 83.03kb (8.36%)
    /judge_pics/data/orig/marquez-monica-1969.jpeg -- 137.21kb -> 125.75kb (8.35%)
    /judge_pics/data/orig/henderson-thelton-1933.jpeg -- 4.02kb -> 3.69kb (8.35%)
    /judge_pics/data/orig/clark-bennett-1890-01-08.jpeg -- 6,792.58kb -> 6,225.34kb (8.35%)
    /judge_pics/data/orig/settle-thomas-1831-01-23.jpeg -- 355.29kb -> 325.80kb (8.3%)
    /judge_pics/data/orig/brasher-andrew-1981.jpeg -- 25.26kb -> 23.17kb (8.28%)
    /judge_pics/data/orig/singal-george-1945.jpeg -- 9.30kb -> 8.53kb (8.27%)
    /judge_pics/data/orig/kennedy-henry-1948.jpeg -- 21.94kb -> 20.13kb (8.26%)
    /judge_pics/data/256/johnson-jed-1888-07-31.jpeg -- 17.73kb -> 16.27kb (8.24%)
    /judge_pics/data/orig/goff-nathan-1843-02-09.jpeg -- 460.59kb -> 422.65kb (8.24%)
    /judge_pics/data/orig/clark-chase-1883-08-21.jpeg -- 82.40kb -> 75.62kb (8.24%)
    /judge_pics/data/orig/albritton-william-1936.jpeg -- 18.72kb -> 17.18kb (8.23%)
    /judge_pics/data/orig/bastian-walter-1891-11-16.jpeg -- 7.43kb -> 6.82kb (8.23%)
    /judge_pics/data/orig/alsup-william-1945.jpeg -- 3.94kb -> 3.61kb (8.21%)
    /judge_pics/data/orig/allen-william-1829-06-09.jpeg -- 795.20kb -> 730.29kb (8.16%)
    /judge_pics/data/orig/gordon-peyton-1870-04-30.jpeg -- 6.79kb -> 6.24kb (8.13%)
    /judge_pics/data/orig/walker-john-1940.jpeg -- 3.94kb -> 3.62kb (8.12%)
    /judge_pics/data/orig/morris-james-1890-11-14.jpeg -- 8.31kb -> 7.63kb (8.12%)
    /judge_pics/data/orig/wright-daniel-1864-09-24.jpeg -- 7.08kb -> 6.50kb (8.11%)
    /judge_pics/data/orig/harris-stanley-1927.jpeg -- 7.77kb -> 7.14kb (8.1%)
    /judge_pics/data/512/christenberry-herbert-1897-12-11.jpeg -- 78.17kb -> 71.84kb (8.1%)
    /judge_pics/data/orig/huff-marilyn-1951.jpeg -- 5.84kb -> 5.37kb (8.1%)
    /judge_pics/data/orig/ketchmark-roseann-1963.jpeg -- 2,016.27kb -> 1,853.23kb (8.09%)
    /judge_pics/data/orig/miller-gale.jpeg -- 29.95kb -> 27.54kb (8.06%)
    /judge_pics/data/orig/tostrud-eric-1965.jpeg -- 31.30kb -> 28.78kb (8.06%)
    /judge_pics/data/orig/burgess-franklin-1935-03-09.jpeg -- 6.33kb -> 5.82kb (8.05%)
    /judge_pics/data/orig/cline-genevieve-1877-07-27.jpeg -- 3,703.14kb -> 3,405.34kb (8.04%)
    /judge_pics/data/orig/tinder-john-1950.jpeg -- 3.95kb -> 3.63kb (8.04%)
    /judge_pics/data/orig/mendoza-salvador-1971.jpeg -- 3.46kb -> 3.18kb (8.02%)
    /judge_pics/data/orig/symes-john-1878-02-10.jpeg -- 6.98kb -> 6.42kb (7.99%)
    /judge_pics/data/orig/thompson-myron-1947.jpeg -- 37.14kb -> 34.18kb (7.97%)
    /judge_pics/data/512/takasugi-robert-1930-09-12.jpeg -- 29.99kb -> 27.60kb (7.97%)
    /judge_pics/data/orig/leventhal-harold-1915-01-05.jpeg -- 622.48kb -> 572.91kb (7.96%)
    /judge_pics/data/orig/lindsay-sam-1951.jpeg -- 3.86kb -> 3.56kb (7.94%)
    /judge_pics/data/orig/watkins-william-1951.jpeg -- 39.25kb -> 36.14kb (7.94%)
    /judge_pics/data/orig/donato-james-1960.jpeg -- 219.77kb -> 202.33kb (7.94%)
    /judge_pics/data/orig/caldwell-henry-1832-09-04.jpeg -- 21.79kb -> 20.06kb (7.93%)
    /judge_pics/data/orig/celebrezze-anthony-1910-09-04.jpeg -- 59.92kb -> 55.17kb (7.92%)
    /judge_pics/data/orig/peters-john-1864-08-13.jpeg -- 482.63kb -> 444.40kb (7.92%)
    /judge_pics/data/orig/rizley-ross-1892-07-05.jpeg -- 50.80kb -> 46.78kb (7.91%)
    /judge_pics/data/orig/bolton-susan-1951.jpeg -- 4.91kb -> 4.52kb (7.9%)
    /judge_pics/data/orig/tigar-jon-1962.jpeg -- 4.99kb -> 4.59kb (7.89%)
    /judge_pics/data/orig/hawthorne-robert.jpeg -- 59.32kb -> 54.64kb (7.88%)
    /judge_pics/data/orig/davis-andre-1949.jpeg -- 141.00kb -> 129.91kb (7.87%)
    /judge_pics/data/orig/duffy-francis-1888-06-23.jpeg -- 274.39kb -> 252.83kb (7.86%)
    /judge_pics/data/orig/smyth-constantine-1859-12-04.jpeg -- 388.67kb -> 358.13kb (7.86%)
    /judge_pics/data/orig/wollman-roger-1934-05-29.jpeg -- 2,415.14kb -> 2,225.44kb (7.85%)
    /judge_pics/data/orig/underwood-mell-1892-01-30.jpeg -- 210.83kb -> 194.28kb (7.85%)
    /judge_pics/data/orig/pennington-william-1757.jpeg -- 123.44kb -> 113.78kb (7.83%)
    /judge_pics/data/512/whaley-robert-1943.jpeg -- 47.16kb -> 43.48kb (7.81%)
    /judge_pics/data/orig/gerrard-john-1953-11-02.jpeg -- 49.25kb -> 45.42kb (7.79%)
    /judge_pics/data/orig/sherman-charles-1811-02-03.jpeg -- 21.13kb -> 19.48kb (7.79%)
    /judge_pics/data/orig/mason-john-1799-04-18.jpeg -- 118.51kb -> 109.28kb (7.78%)
    /judge_pics/data/orig/prentiss-samuel-1782-03-31.jpeg -- 11.19kb -> 10.32kb (7.78%)
    /judge_pics/data/512/hatter-terry-1933.jpeg -- 75.54kb -> 69.68kb (7.76%)
    /judge_pics/data/orig/sachs-howard-1925.jpeg -- 19.79kb -> 18.26kb (7.76%)
    /judge_pics/data/orig/feess-gary-1948.jpeg -- 4.38kb -> 4.04kb (7.76%)
    /judge_pics/data/orig/hitchcock-samuel-1755-03-23.jpeg -- 95.87kb -> 88.46kb (7.73%)
    /judge_pics/data/orig/almond-james-1898-06-15.jpeg -- 219.29kb -> 202.33kb (7.73%)
    /judge_pics/data/orig/mayer-haldane-1941.jpeg -- 461.69kb -> 426.01kb (7.73%)
    /judge_pics/data/orig/bissell-john-1940.jpeg -- 25.83kb -> 23.84kb (7.72%)
    /judge_pics/data/orig/england-morrison-1954.jpeg -- 101.59kb -> 93.75kb (7.72%)
    /judge_pics/data/orig/boarman-alexander-1839-12-10.jpeg -- 1,197.92kb -> 1,105.46kb (7.72%)
    /judge_pics/data/orig/irizarry-dora-1955.jpeg -- 47.73kb -> 44.04kb (7.71%)
    /judge_pics/data/orig/kollar-kotelly-colleen-1943.jpeg -- 19.77kb -> 18.24kb (7.71%)
    /judge_pics/data/orig/gayle-john-1792-09-11.jpeg -- 24.09kb -> 22.23kb (7.71%)
    /judge_pics/data/orig/shaw-robert-1907-05-22.jpeg -- 30.88kb -> 28.50kb (7.71%)
    /judge_pics/data/orig/smith-william-1903-02-24.jpeg -- 31.25kb -> 28.84kb (7.71%)
    /judge_pics/data/orig/weinman-carl-1903-01-27.jpeg -- 23.98kb -> 22.13kb (7.69%)
    /judge_pics/data/orig/frankfurter-felix-1882-11-15.jpeg -- 82.13kb -> 75.82kb (7.69%)
    /judge_pics/data/orig/terry-diana-1956.jpeg -- 34.23kb -> 31.60kb (7.69%)
    /judge_pics/data/orig/graham-dennis-1946-02-12.jpeg -- 30.97kb -> 28.59kb (7.67%)
    /judge_pics/data/orig/ross-erskine-1845-06-30.jpeg -- 59.83kb -> 55.24kb (7.67%)
    /judge_pics/data/orig/leddy-bernard-1910-03-18.jpeg -- 79.49kb -> 73.40kb (7.66%)
    /judge_pics/data/orig/torresen-nancy-1959.jpeg -- 11.45kb -> 10.57kb (7.65%)
    /judge_pics/data/orig/machrowicz-thaddeus-1899-08-21.jpeg -- 89.96kb -> 83.08kb (7.65%)
    /judge_pics/data/512/gee-dolly-1959.jpeg -- 29.68kb -> 27.41kb (7.65%)
    /judge_pics/data/512/lioi-sara-1960.jpeg -- 93.15kb -> 86.03kb (7.64%)
    /judge_pics/data/256/pickering-charles-1937.jpeg -- 16.66kb -> 15.39kb (7.64%)
    /judge_pics/data/orig/lasnik-robert-1951.jpeg -- 5.24kb -> 4.84kb (7.62%)
    /judge_pics/data/orig/huvelle-ellen-1948.jpeg -- 23.77kb -> 21.96kb (7.62%)
    /judge_pics/data/orig/watson-derrick-1966.jpeg -- 89.87kb -> 83.02kb (7.62%)
    /judge_pics/data/orig/danaher-john-1899-01-09.jpeg -- 10.12kb -> 9.35kb (7.61%)
    /judge_pics/data/orig/mackinnon-george-1906-04-22.jpeg -- 539.42kb -> 498.42kb (7.6%)
    /judge_pics/data/orig/taubman-daniel-1948-02-25.jpeg -- 103.93kb -> 96.04kb (7.59%)
    /judge_pics/data/512/trott-stephen-1939.jpeg -- 65.92kb -> 60.92kb (7.58%)
    /judge_pics/data/orig/skopil-otto-1919-06-03.jpeg -- 22.02kb -> 20.35kb (7.55%)
    /judge_pics/data/orig/rice-nancy-1950-06-02.jpeg -- 88.02kb -> 81.38kb (7.54%)
    /judge_pics/data/orig/grant-robert-1905-07-31.jpeg -- 23.55kb -> 21.77kb (7.53%)
    /judge_pics/data/orig/coffin-frank-1919-07-11.jpeg -- 88.96kb -> 82.27kb (7.52%)
    /judge_pics/data/orig/hatfield-paul-1928-04-29.jpeg -- 18.45kb -> 17.07kb (7.5%)
    /judge_pics/data/orig/goldberg-mitchell-1959.jpeg -- 300.65kb -> 278.11kb (7.5%)
    /judge_pics/data/orig/brotman-stanley-1924-07-27.jpeg -- 38.89kb -> 35.98kb (7.48%)
    /judge_pics/data/orig/paez-richard-1947.jpeg -- 4.12kb -> 3.82kb (7.48%)
    /judge_pics/data/512/mccune-barron-1915-02-19.jpeg -- 53.42kb -> 49.43kb (7.48%)
    /judge_pics/data/orig/kobayashi-leslie-1957.jpeg -- 90.42kb -> 83.66kb (7.48%)
    /judge_pics/data/512/rayfiel-leo-1888-03-22.jpeg -- 50.89kb -> 47.09kb (7.47%)
    /judge_pics/data/512/underwood-john-1809-03-14.jpeg -- 88.59kb -> 81.97kb (7.47%)
    /judge_pics/data/orig/marks-emily-1973.jpeg -- 16.74kb -> 15.50kb (7.46%)
    /judge_pics/data/512/biunno-vincent-1916-02-02.jpeg -- 77.94kb -> 72.13kb (7.45%)
    /judge_pics/data/orig/quarles-joseph-1843-12-16.jpeg -- 10.29kb -> 9.53kb (7.43%)
    /judge_pics/data/orig/peck-john-1874-02-05.jpeg -- 14.05kb -> 13.01kb (7.39%)
    /judge_pics/data/orig/ikuta-sandra-1954.jpeg -- 49.21kb -> 45.59kb (7.37%)
    /judge_pics/data/orig/luhring-oscar-1879-02-11.jpeg -- 7.35kb -> 6.81kb (7.36%)
    /judge_pics/data/256/lanning-william-1849-01-01.jpeg -- 22.37kb -> 20.72kb (7.36%)
    /judge_pics/data/orig/king-george-1951.jpeg -- 15.50kb -> 14.36kb (7.35%)
    /judge_pics/data/orig/thornton-thomas-1898-03-08.jpeg -- 232.42kb -> 215.38kb (7.33%)
    /judge_pics/data/orig/scudder-michael-1971.jpeg -- 92.70kb -> 85.91kb (7.32%)
    /judge_pics/data/512/baird-lourdes-1935.jpeg -- 65.05kb -> 60.29kb (7.32%)
    /judge_pics/data/orig/laporte-elizabeth.jpeg -- 4.59kb -> 4.25kb (7.32%)
    /judge_pics/data/orig/paine-elijah-1757-01-21.jpeg -- 10.31kb -> 9.55kb (7.31%)
    /judge_pics/data/orig/mehta-amit-1971.jpeg -- 66.80kb -> 61.92kb (7.31%)
    /judge_pics/data/orig/chhabria-vince-1969.jpeg -- 210.66kb -> 195.26kb (7.31%)
    /judge_pics/data/512/west-samuel-1872-07-17.jpeg -- 61.41kb -> 56.92kb (7.31%)
    /judge_pics/data/orig/orrick-william-1915-10-10.jpeg -- 5.73kb -> 5.32kb (7.29%)
    /judge_pics/data/orig/smalley-david-1809-04-06.jpeg -- 45.90kb -> 42.56kb (7.28%)
    /judge_pics/data/512/timlin-robert-1932-07-26.jpeg -- 66.09kb -> 61.30kb (7.25%)
    /judge_pics/data/orig/ishii-anthony-1946.jpeg -- 5.94kb -> 5.51kb (7.25%)
    /judge_pics/data/256/rives-alexander-1806-06-17.jpeg -- 27.32kb -> 25.35kb (7.22%)
    /judge_pics/data/512/rives-alexander-1806-06-17.jpeg -- 71.14kb -> 66.01kb (7.21%)
    /judge_pics/data/orig/pitney-mahlon-1858-02-05.jpeg -- 28.68kb -> 26.61kb (7.21%)
    /judge_pics/data/orig/patterson-robert-1891-02-12.jpeg -- 133.46kb -> 123.85kb (7.21%)
    /judge_pics/data/orig/eubanks-luther-1917-07-31.jpeg -- 13.72kb -> 12.73kb (7.2%)
    /judge_pics/data/orig/mayer-julius-1865-09-05.jpeg -- 372.50kb -> 345.68kb (7.2%)
    /judge_pics/data/orig/breyer-charles-1941.jpeg -- 4.53kb -> 4.21kb (7.19%)
    /judge_pics/data/orig/orrick-william-1953.jpeg -- 4.82kb -> 4.47kb (7.17%)
    /judge_pics/data/orig/milazzo-jane-1957.jpeg -- 146.61kb -> 136.10kb (7.17%)
    /judge_pics/data/orig/hickey-john-1911-08-22.jpeg -- 5.51kb -> 5.11kb (7.17%)
    /judge_pics/data/orig/agee-g-1952-11-12.jpeg -- 4.56kb -> 4.24kb (7.15%)
    /judge_pics/data/orig/reinhardt-stephen-1931.jpeg -- 502.02kb -> 466.16kb (7.14%)
    /judge_pics/data/orig/hood-denise-1952.jpeg -- 43.59kb -> 40.48kb (7.14%)
    /judge_pics/data/orig/frank-jerome-1889-09-10.jpeg -- 129.59kb -> 120.33kb (7.14%)
    /judge_pics/data/orig/bough-stephen-1970.jpeg -- 17.63kb -> 16.38kb (7.11%)
    /judge_pics/data/512/hall-peirson-1894-07-31.jpeg -- 39.61kb -> 36.80kb (7.1%)
    /judge_pics/data/orig/martini-william-1947.jpeg -- 13.38kb -> 12.43kb (7.1%)
    /judge_pics/data/orig/shwartz-patty-1961.jpeg -- 7.66kb -> 7.12kb (7.1%)
    /judge_pics/data/orig/choate-william-1830-08-30.jpeg -- 227.54kb -> 211.39kb (7.1%)
    /judge_pics/data/orig/battaglia-anthony-1949.jpeg -- 23.77kb -> 22.09kb (7.09%)
    /judge_pics/data/orig/gorsuch-neil-1967-08-29.jpeg -- 606.34kb -> 563.40kb (7.08%)
    /judge_pics/data/orig/howe-harland-1873-02-19.jpeg -- 117.64kb -> 109.31kb (7.08%)
    /judge_pics/data/512/lanning-william-1849-01-01.jpeg -- 74.56kb -> 69.29kb (7.06%)
    /judge_pics/data/orig/widener-hiram-1923-04-30.jpeg -- 29.01kb -> 26.96kb (7.05%)
    /judge_pics/data/orig/washington-bushrod-1762-06-05.jpeg -- 27.50kb -> 25.57kb (7.05%)
    /judge_pics/data/orig/betts-samuel-1786-06-08.jpeg -- 16.87kb -> 15.68kb (7.04%)
    /judge_pics/data/orig/jackson-howell-1832-04-08.jpeg -- 24.80kb -> 23.05kb (7.04%)
    /judge_pics/data/512/johnson-sterling-1934.jpeg -- 105.53kb -> 98.10kb (7.03%)
    /judge_pics/data/orig/lewis-timothy-1954.jpeg -- 1,563.16kb -> 1,453.35kb (7.02%)
    /judge_pics/data/orig/mack-julian-1866-07-19.jpeg -- 63.74kb -> 59.27kb (7.02%)
    /judge_pics/data/512/smith-william-1903-02-24.jpeg -- 59.32kb -> 55.16kb (7.02%)
    /judge_pics/data/orig/woodcock-john-1950.jpeg -- 7.96kb -> 7.40kb (7.01%)
    /judge_pics/data/orig/lord-miles-1919.jpeg -- 12.71kb -> 11.82kb (7.01%)
    /judge_pics/data/orig/jenkins-martin-1953.jpeg -- 4.98kb -> 4.63kb (7.01%)
    /judge_pics/data/orig/gilman-ronald-1942.jpeg -- 5.16kb -> 4.80kb (7.01%)
    /judge_pics/data/orig/karlton-lawrence-1935.jpeg -- 1,110.06kb -> 1,032.37kb (7%)
    /judge_pics/data/orig/ryan-james-1932-11-19.jpeg -- 6.27kb -> 5.83kb (7%)
    /judge_pics/data/orig/hargrove-john-1923-10-25.jpeg -- 36.63kb -> 34.07kb (7%)
    /judge_pics/data/orig/moore-kimberly-1968.jpeg -- 4.16kb -> 3.87kb (7%)
    /judge_pics/data/512/oconnor-earl-1922-10-06.jpeg -- 84.06kb -> 78.18kb (7%)
    /judge_pics/data/orig/bernard-steve-1952.jpeg -- 28.51kb -> 26.52kb (6.99%)
    /judge_pics/data/512/tashima-atsushi-1934.jpeg -- 64.16kb -> 59.69kb (6.98%)
    /judge_pics/data/orig/mccree-wade-1920-07-03.jpeg -- 8.95kb -> 8.33kb (6.95%)
    /judge_pics/data/orig/pennybacker-isaac-1805-09-03.jpeg -- 12.88kb -> 11.98kb (6.94%)
    /judge_pics/data/orig/williams-robert-1868-12-20.jpeg -- 1,655.42kb -> 1,540.71kb (6.93%)
    /judge_pics/data/orig/freeman-beth-1953.jpeg -- 176.70kb -> 164.45kb (6.93%)
    /judge_pics/data/orig/gertner-nancy-1946.jpeg -- 100.00kb -> 93.08kb (6.92%)
    /judge_pics/data/orig/tarnow-arthur-1942.jpeg -- 5.22kb -> 4.86kb (6.92%)
    /judge_pics/data/512/zapata-frank-1944.jpeg -- 84.67kb -> 78.81kb (6.92%)
    /judge_pics/data/orig/breyer-stephen-1938.jpeg -- 1,014.05kb -> 944.05kb (6.9%)
    /judge_pics/data/orig/freeman-ralph-1902-05-05.jpeg -- 21.45kb -> 19.97kb (6.9%)
    /judge_pics/data/orig/hagner-alexander-1826-07-13.jpeg -- 7.14kb -> 6.64kb (6.9%)
    /judge_pics/data/512/callahan-consuelo-1950-06-09.jpeg -- 69.51kb -> 64.72kb (6.89%)
    /judge_pics/data/orig/westenhaver-david-1865-01-13.jpeg -- 17.35kb -> 16.15kb (6.89%)
    /judge_pics/data/orig/kirkpatrick-william-1885-10-02.jpeg -- 50.39kb -> 46.92kb (6.89%)
    /judge_pics/data/512/zipps-jennifer-1964.jpeg -- 65.00kb -> 60.53kb (6.88%)
    /judge_pics/data/512/johnson-charles-1859-02-14.jpeg -- 51.67kb -> 48.12kb (6.87%)
    /judge_pics/data/512/lorenz-myron-1935.jpeg -- 80.21kb -> 74.71kb (6.86%)
    /judge_pics/data/orig/coleman-james-1914-01-09.jpeg -- 212.00kb -> 197.50kb (6.84%)
    /judge_pics/data/orig/haynes-catharina-1963.jpeg -- 5.49kb -> 5.11kb (6.84%)
    /judge_pics/data/orig/miller-andrew-1870-11-16.jpeg -- 5.12kb -> 4.77kb (6.83%)
    /judge_pics/data/512/underwood-mell-1892-01-30.jpeg -- 63.68kb -> 59.33kb (6.82%)
    /judge_pics/data/orig/walker-vaughn-1944.jpeg -- 101.00kb -> 94.11kb (6.82%)
    /judge_pics/data/orig/robinson-spottswood-1916-07-26.jpeg -- 8.84kb -> 8.24kb (6.81%)
    /judge_pics/data/512/tevrizian-dickran-1940.jpeg -- 58.29kb -> 54.32kb (6.8%)
    /judge_pics/data/256/hall-peirson-1894-07-31.jpeg -- 17.24kb -> 16.07kb (6.8%)
    /judge_pics/data/orig/echols-robert-1941.jpeg -- 6.09kb -> 5.68kb (6.8%)
    /judge_pics/data/orig/hunt-ward-1810-06-14.jpeg -- 28.63kb -> 26.69kb (6.78%)
    /judge_pics/data/orig/moreno-carlos-1948-11-04.jpeg -- 73.94kb -> 68.93kb (6.78%)
    /judge_pics/data/orig/degravelles-john-1949.jpeg -- 13.20kb -> 12.31kb (6.75%)
    /judge_pics/data/orig/loeb-alan-1946-12-27.jpeg -- 1,525.95kb -> 1,423.10kb (6.74%)
    /judge_pics/data/512/hand-augustus-1869-07-26.jpeg -- 91.49kb -> 85.33kb (6.73%)
    /judge_pics/data/orig/wood-diane-1950.jpeg -- 239.48kb -> 223.37kb (6.73%)
    /judge_pics/data/512/cooper-florence-marie-1940-02-09.jpeg -- 73.58kb -> 68.63kb (6.72%)
    /judge_pics/data/512/smith-norman-1949.jpeg -- 38.80kb -> 36.20kb (6.71%)
    /judge_pics/data/orig/bright-myron-1919.jpeg -- 99.85kb -> 93.15kb (6.71%)
    /judge_pics/data/orig/shepard-seth-1847-04-23.jpeg -- 393.92kb -> 367.53kb (6.7%)
    /judge_pics/data/orig/bohanon-luther-1902-08-09.jpeg -- 7.04kb -> 6.57kb (6.7%)
    /judge_pics/data/512/shaw-robert-1907-05-22.jpeg -- 58.28kb -> 54.38kb (6.69%)
    /judge_pics/data/512/miller-jack-1916-06-06.jpeg -- 62.97kb -> 58.75kb (6.69%)
    /judge_pics/data/512/jones-richard-1950.jpeg -- 50.41kb -> 47.04kb (6.69%)
    /judge_pics/data/orig/burrell-garland-1947.jpeg -- 6.40kb -> 5.97kb (6.67%)
    /judge_pics/data/orig/bledsoe-benjamin-1874-02-08.jpeg -- 149.94kb -> 139.97kb (6.65%)
    /judge_pics/data/orig/groner-duncan-1873-09-06.jpeg -- 1,011.77kb -> 944.52kb (6.65%)
    /judge_pics/data/512/kennedy-henry-1948.jpeg -- 59.82kb -> 55.84kb (6.65%)
    /judge_pics/data/orig/shapiro-norma-1928.jpeg -- 53.56kb -> 50.00kb (6.65%)
    /judge_pics/data/orig/runyon-william-1871-03-05.jpeg -- 45.84kb -> 42.79kb (6.64%)
    /judge_pics/data/512/duell-charles-1850-04-13.jpeg -- 59.85kb -> 55.88kb (6.63%)
    /judge_pics/data/orig/kenyon-william-1869-06-10.jpeg -- 20.36kb -> 19.01kb (6.63%)
    /judge_pics/data/512/snow-grant-1959-10-20.jpeg -- 100.92kb -> 94.23kb (6.62%)
    /judge_pics/data/orig/moskowitz-barry-1950.jpeg -- 24.90kb -> 23.25kb (6.62%)
    /judge_pics/data/orig/de-vries-marion-1865-08-15.jpeg -- 544.99kb -> 508.91kb (6.62%)
    /judge_pics/data/256/mccune-barron-1915-02-19.jpeg -- 22.01kb -> 20.56kb (6.61%)
    /judge_pics/data/orig/erickson-ralph-1959.jpeg -- 29.66kb -> 27.70kb (6.61%)
    /judge_pics/data/orig/rosenthal-lee-1952.jpeg -- 47.12kb -> 44.01kb (6.6%)
    /judge_pics/data/orig/story-joseph-1779-09-18.jpeg -- 32.11kb -> 29.99kb (6.6%)
    /judge_pics/data/256/ritter-halsted-1868-07-14.jpeg -- 15.81kb -> 14.77kb (6.59%)
    /judge_pics/data/256/duell-charles-1850-04-13.jpeg -- 17.17kb -> 16.04kb (6.59%)
    /judge_pics/data/256/rayfiel-leo-1888-03-22.jpeg -- 14.83kb -> 13.85kb (6.59%)
    /judge_pics/data/orig/hayes-william-1956.jpeg -- 26.09kb -> 24.37kb (6.59%)
    /judge_pics/data/orig/holland-hezekiah-1936.jpeg -- 71.81kb -> 67.08kb (6.58%)
    /judge_pics/data/512/king-garr-1936.jpeg -- 64.82kb -> 60.56kb (6.58%)
    /judge_pics/data/256/burns-james-1924-11-24.jpeg -- 15.84kb -> 14.80kb (6.57%)
    /judge_pics/data/orig/armstrong-saundra-1947.jpeg -- 4.25kb -> 3.97kb (6.57%)
    /judge_pics/data/512/roberts-richard-1953.jpeg -- 54.82kb -> 51.21kb (6.57%)
    /judge_pics/data/orig/ryu-donna.jpeg -- 4.70kb -> 4.39kb (6.56%)
    /judge_pics/data/orig/mcduffie-john-1883-09-25.jpeg -- 2,653.92kb -> 2,479.88kb (6.56%)
    /judge_pics/data/orig/hungate-william-1922-12-14.jpeg -- 5.65kb -> 5.28kb (6.56%)
    /judge_pics/data/512/jorgenson-cindy-1953.jpeg -- 103.02kb -> 96.28kb (6.55%)
    /judge_pics/data/orig/white-helene-1954.jpeg -- 4.88kb -> 4.56kb (6.54%)
    /judge_pics/data/orig/spero-joseph.jpeg -- 18.76kb -> 17.53kb (6.52%)
    /judge_pics/data/orig/kearney-mark-1963.jpeg -- 56.09kb -> 52.43kb (6.52%)
    /judge_pics/data/512/bea-carlos-1934.jpeg -- 57.43kb -> 53.69kb (6.52%)
    /judge_pics/data/orig/pisano-joel-1949.jpeg -- 49.02kb -> 45.83kb (6.51%)
    /judge_pics/data/512/marshall-consuelo-1936.jpeg -- 50.71kb -> 47.41kb (6.51%)
    /judge_pics/data/512/kenyon-william-1869-06-10.jpeg -- 51.72kb -> 48.36kb (6.5%)
    /judge_pics/data/orig/picard-frank-1889-10-19.jpeg -- 547.17kb -> 511.64kb (6.49%)
    /judge_pics/data/256/humphreys-west-1806-08-26.jpeg -- 14.93kb -> 13.96kb (6.49%)
    /judge_pics/data/orig/smith-walter-1862-07-10.jpeg -- 194.90kb -> 182.25kb (6.49%)
    /judge_pics/data/512/reeves-carlton-1964.jpeg -- 90.12kb -> 84.27kb (6.48%)
    /judge_pics/data/orig/bell-griffin-1918-10-31.jpeg -- 22.89kb -> 21.41kb (6.48%)
    /judge_pics/data/512/biddle-francis-1886-05-09.jpeg -- 63.94kb -> 59.80kb (6.48%)
    /judge_pics/data/512/ritter-willis-1899-01-24.jpeg -- 49.50kb -> 46.30kb (6.48%)
    /judge_pics/data/orig/bryan-george-1809-05-22.jpeg -- 69.71kb -> 65.20kb (6.47%)
    /judge_pics/data/orig/waddy-joseph-1911-05-26.jpeg -- 9.37kb -> 8.76kb (6.47%)
    /judge_pics/data/512/sirica-john-1904-03-19.jpeg -- 155.12kb -> 145.09kb (6.47%)
    /judge_pics/data/512/thomas-edward-1848-08-04.jpeg -- 64.33kb -> 60.17kb (6.47%)
    /judge_pics/data/512/jones-paul-1880-11-04.jpeg -- 102.30kb -> 95.68kb (6.47%)
    /judge_pics/data/orig/finkelnburg-gustavus-1837-04-06.jpeg -- 56.97kb -> 53.29kb (6.47%)
    /judge_pics/data/orig/hastings-alcee-1936.jpeg -- 8,494.88kb -> 7,945.55kb (6.47%)
    /judge_pics/data/orig/duval-stanwood-1942.jpeg -- 116.23kb -> 108.71kb (6.46%)
    /judge_pics/data/orig/hand-learned-1872-01-27.jpeg -- 350.91kb -> 328.23kb (6.46%)
    /judge_pics/data/orig/delahay-mark-1828.jpeg -- 41.30kb -> 38.63kb (6.46%)
    /judge_pics/data/512/bell-jesse-1906-04-01.jpeg -- 138.44kb -> 129.50kb (6.46%)
    /judge_pics/data/orig/reeves-carlton-1964.jpeg -- 475.26kb -> 444.61kb (6.45%)
    /judge_pics/data/orig/oberdorfer-louis-1919-02-21.jpeg -- 9.04kb -> 8.45kb (6.44%)
    /judge_pics/data/orig/cooper-irving-1902-02-07.jpeg -- 19.91kb -> 18.63kb (6.44%)
    /judge_pics/data/orig/kagan-elena-2.jpeg -- 1,473.38kb -> 1,378.59kb (6.43%)
    /judge_pics/data/512/hopkinson-joseph-1770-11-12.jpeg -- 70.91kb -> 66.35kb (6.43%)
    /judge_pics/data/orig/hogan-michael-1946.jpeg -- 4.62kb -> 4.32kb (6.43%)
    /judge_pics/data/512/hoffman-ogden-1822-10-16.jpeg -- 71.75kb -> 67.14kb (6.43%)
    /judge_pics/data/orig/fish-allen-1942.jpeg -- 9.22kb -> 8.63kb (6.42%)
    /judge_pics/data/256/trott-stephen-1939.jpeg -- 27.08kb -> 25.34kb (6.42%)
    /judge_pics/data/512/milazzo-jane-1957.jpeg -- 107.46kb -> 100.57kb (6.41%)
    /judge_pics/data/orig/mcclelland-charles-1854-12-19.jpeg -- 24.10kb -> 22.56kb (6.41%)
    /judge_pics/data/orig/saunders-eugene-1853-07-25.jpeg -- 1,134.66kb -> 1,062.03kb (6.4%)
    /judge_pics/data/orig/benitez-roger-1950.jpeg -- 26.35kb -> 24.66kb (6.4%)
    /judge_pics/data/512/mosman-michael-1956.jpeg -- 56.59kb -> 52.97kb (6.4%)
    /judge_pics/data/512/gilliam-earl-1931-08-17.jpeg -- 63.12kb -> 59.09kb (6.39%)
    /judge_pics/data/512/friendly-henry-1903-07-03.jpeg -- 67.77kb -> 63.44kb (6.39%)
    /judge_pics/data/256/simonton-charles-1829-07-11.jpeg -- 16.70kb -> 15.63kb (6.39%)
    /judge_pics/data/512/selna-james-1945.jpeg -- 50.29kb -> 47.08kb (6.38%)
    /judge_pics/data/512/sanborn-john-1883-11-09.jpeg -- 85.98kb -> 80.49kb (6.38%)
    /judge_pics/data/orig/rogers-john-1845-10-09.jpeg -- 15.92kb -> 14.91kb (6.38%)
    /judge_pics/data/128/nugent-donald-1948.jpeg -- 8.42kb -> 7.89kb (6.38%)
    /judge_pics/data/orig/anderson-aldon-1917-01-03.jpeg -- 6.57kb -> 6.15kb (6.38%)
    /judge_pics/data/512/johnson-jed-1888-07-31.jpeg -- 49.85kb -> 46.67kb (6.36%)
    /judge_pics/data/orig/dayton-alston-1857-10-18.jpeg -- 191.78kb -> 179.58kb (6.36%)
    /judge_pics/data/256/buckley-james-1923.jpeg -- 18.72kb -> 17.53kb (6.36%)
    /judge_pics/data/512/readler-chad-1972.jpeg -- 69.55kb -> 65.13kb (6.35%)
    /judge_pics/data/orig/ewart-hamilton-1849-10-23.jpeg -- 18.92kb -> 17.72kb (6.34%)
    /judge_pics/data/orig/sabraw-dana-1958.jpeg -- 31.24kb -> 29.27kb (6.33%)
    /judge_pics/data/256/underwood-john-1809-03-14.jpeg -- 25.25kb -> 23.66kb (6.32%)
    /judge_pics/data/orig/dallinger-fredrick-1871-10-02.jpeg -- 604.14kb -> 566.04kb (6.31%)
    /judge_pics/data/orig/diamond-gustave-1928.jpeg -- 13.44kb -> 12.59kb (6.31%)
    /judge_pics/data/orig/bryan-nathan-1872-04-23.jpeg -- 17.18kb -> 16.10kb (6.3%)
    /judge_pics/data/256/reeves-carlton-1964.jpeg -- 23.06kb -> 21.61kb (6.3%)
    /judge_pics/data/256/clark-chase-1883-08-21.jpeg -- 17.54kb -> 16.44kb (6.29%)
    /judge_pics/data/orig/beeler-laurel.jpeg -- 4.98kb -> 4.67kb (6.29%)
    /judge_pics/data/orig/johnson-charles-1859-02-14.jpeg -- 21.02kb -> 19.70kb (6.29%)
    /judge_pics/data/512/campbell-david-1952.jpeg -- 51.83kb -> 48.58kb (6.29%)
    /judge_pics/data/orig/colt-lebaron-1846-06-25.jpeg -- 125.95kb -> 118.03kb (6.29%)
    /judge_pics/data/orig/black-hugo-1886-02-27.jpeg -- 48.82kb -> 45.75kb (6.29%)
    /judge_pics/data/orig/pregerson-dean-1951.jpeg -- 463.16kb -> 434.05kb (6.29%)
    /judge_pics/data/512/clifton-richard-1950.jpeg -- 83.80kb -> 78.54kb (6.28%)
    /judge_pics/data/256/sanders-harold-1925-02-05.jpeg -- 18.78kb -> 17.60kb (6.28%)
    /judge_pics/data/256/huxman-walter-1887-02-16.jpeg -- 19.89kb -> 18.64kb (6.27%)
    /judge_pics/data/orig/bonner-robert-1942.jpeg -- 105.37kb -> 98.76kb (6.27%)
    /judge_pics/data/512/stotler-alicemarie-1942-05-29.jpeg -- 87.13kb -> 81.66kb (6.27%)
    /judge_pics/data/orig/crane-randy-1965.jpeg -- 22.36kb -> 20.96kb (6.27%)
    /judge_pics/data/orig/southwick-leslie-1950.jpeg -- 11.31kb -> 10.61kb (6.27%)
    /judge_pics/data/orig/mcdermott-george-1886-10-21.jpeg -- 6.90kb -> 6.47kb (6.27%)
    /judge_pics/data/256/kennedy-henry-1948.jpeg -- 24.85kb -> 23.29kb (6.26%)
    /judge_pics/data/…
@slonopotamus
Copy link

I believe pypa/setuptools#3291 is another kind of this issue. Note that it neither involves virtualenv, nor Debian/Centos, but sympthoms are exactly the same: system-wide older version of setuptools has higher priority than one that is requested by pypackage.toml.

leycec added a commit to betsee/betse that referenced this issue May 25, 2022
This commit resolves recent catastrophic upstream breakage introduced by
setuptools 50.0 and pip 22.2.0, the newest stable release of everyone's
least favourite build tools. Sadly, doing so requires temporarily
disabling project-wide support for the tooling-agnostic "pyproject.toml"
file -- which setuptools and pip continually demonstrate that they are
unwilling to sanely support.

## Issues Resolved

* #2, detailed above.
* #3, detailed below.
* pypa/setuptools#2353 and pypa/pip#6264, resolving recent catastrophic
  upstream breakage introduced by setuptools 50.0 and pip 22.2.0, the
  newest stable release of everyone's least favourite build tools.
  Sadly, doing so requires temporarily disabling project-wide support
  for the tooling-agnostic `pyproject.toml` file -- which setuptools and
  pip continually demonstrate that they are unwilling to sanely support.

(Unctuous tempestuousness of pestilence!)
leycec added a commit to betsee/betse that referenced this issue Jun 4, 2022
This minor release resolves a growing cacophony of compatibility issues
that have accrued in the two-and-a-half years since BETSE's last prior
stable release (i.e., BETSE 1.1.1 (Nicer Nestor) in the pre-pandemic
twilight of November, 2019). BETSE authors gratefully thank Dr. Levin at
the Levin Lab, Tufts University for his continued patronage of BETSE.

Noteworthy changes include:

## Hosting Improved

* **GitLab -> GitHub.** BETSE's `git` repository has been officially
  migrated from our prior host at GitLab to our new host at GitHub,
  mostly so as to centralize the maintenance burden of continuous
  integration (CI) workflows across this and the upstream @beartype
  project. Specifically:
  * Our prior GitLab-specific GitLab-CI and Windows-specific Appveyor CI
    configurations have been supplanted wholesale with our standard
    GitHub-specific GitHub Actions CI workflows for both package testing
    and publication.
  * Our front-facing `README.rst` documentation has been trivially
    revised to reference GitHub rather than GitLab.
  * Our prior GitLab-specific `tox.ini` configuration and
    `doc/rst/RELEASE.rst documentation have been supplanted wholesale
    with actively maintained and more GitHub-friendly equivalents
    liberally harvested from our upstream @beartype project.

## Compatibility Improved

* **Python >= 3.9.0.** BETSE now officially supports both the Python
  3.9.x and 3.10.x series.
* **macOS Aqua detection.** BETSE now detects the macOS-specific Aqua
  display server with significantly more robust logic. Previously, that
  detection unexpectedly raised exceptions under continuous integration
  (CI) workflows hosted by GitHub Actions. Now, that detection has been
  generalized to be resilient against edge cases – including:
  * The absence of the core macOS
    `/System/Library/Frameworks/Security.framework/Security` library.
  * The absence of the `OSError`-specific `strerror` instance variable
    on low-level exceptions raised during this detection.
* **Windows environment variable detection.** BETSE now circumvents
  erroneous Windows-specific shell environments produced by the GitHub
  Actions Windows runner, which fails to define the critical
  `%LOCALAPPDATA%`, `%APPDATA%`, or `%HOME` shell environment variables.
  Specifically:
  * The `betse.util.app.meta.AppMetaABC.dot_dirname()` method now
    leverages the first of the following shell environment variables
    exported to the active Windows process via trivial iteration:
    `%LOCALAPPDATA%`, `%APPDATA%`, and our standard `get_home_dirname()`
    getter. Insanely, the GitHub Actions Windows runner fails to export
    the former two shell environment variables as well as the otherwise
    standard `%HOME%` shell environment variable, which doesn't leave
    BETSE with terribly many options in CI environments.
* **Windows subdirectory detection.**  BETSE now circumvents the
  erroneous Windows-specific implementation of the standard
  `os.path.commonpath()` function, which unsafely raises an exception
  rather than safely returning `False` when passed two pathnames
  residing on different Windows drives (e.g., `C:/`, `D:/`). Our
  `betse.util.path.dirs.is_subdir()` tester now catches and coerces that
  unsafe exception into a safe return value of `False`.

## Compatibility Broken

* **Python < 3.8.0.** This release officially breaks backward
  compatibility by dropping support for the Python 3.5.x, 3.6.x, and
  3.7.x series. The former two have officially hit their End-of-Life
  (EOL); the latter is a half-year away from doing so and no longer
  worth officially supporting.
* **PIL (Pillow) < 7.0.0.** This release officially breaks backward
  compatibility by dropping support for PIL (Pillow) < 7.0.0. See below.

## Dependencies Bumped

* **NumPy ≥ 1.22.0.** BETSE now requires NumPy ≥ 1.22.0, which
  dramatically modified the (admittedly private) install-time
  `numpy.distutils.__config__` API describing how NumPy was linked
  against various external third-party shared libraries (e.g., BLAS,
  LAPACK) at install-time. Our `betse.lib.numpy.numpys` submodule now
  accesses that private NumPy API *much* more carefully – with robust
  future-proofing against predicted breakage by future NumPy releases
  breaking that API yet again.
* **PIL (Pillow) ≥ 7.0.0.** BETSE now requires PIL (Pillow) ≥ 7.0.0,
  which introduced the standard `pillow.__version__` attribute and
  deprecated the non-standard `pillow.PILLOW_VERSION` attribute. Doing
  so renders the codebase incompatible with PIL (Pillow) < 7.0.0.
  Relatedly, The
  `betse.util.py.module.pymodname.MODULE_NAME_TO_VERSION_ATTR_NAME`
  dictionary has removed the non-standard `PIL: 'PILLOW_VERSION'` entry.
* **`pytest` ≥ 5.4.0,** which refactored the previously defined private
  `_pytest.capture.CaptureManager._getcapture()` method into the newly
  defined `private _pytest.capture._getmulticapture()` function, which
  the `betse.lib.setuptools.command.supcmdtest` submodule necessarily
  monkey-patches at test time to sanitize captured output for
  long-running tests.

## Features Improved.

* **Runtime dependency validation.** BETSE now validates whether
  optional and mandatory dependencies satisfy requirements at
  application startup by manually validating dependency versions
  *before* deferring to increasingly unreliable `setuptools`-specific
  logic for doing so. Specifically:
  * The private `betse.lib.libs._iter_requirement_commands()` iterator
    has been generalized to accept items of the
    `REQUIREMENT_NAME_TO_COMMANDS` dictionary as codebase-agnostic
    tuples rather than codebase-specific
    `betse.metadata.RequirementCommand` instances.
  * In the `betse.lib.setuptools.setuptool` submodule:
    * The `die_unless_requirement(`) validator and `is_requirement()`
      tester have been generalized to manually validate dependency
      versions before deferring to `setuptools`-specific logic for doing
      so.
    * The `get_requirement_distribution_or_none()` getter docstring has
      been revised to note that that getter should *only* be called as a
      latch-ditch fallback.
* **Traceback handling.** BETSE now drastically simplifies its handling
  of exception tracebacks. Previously, BETSE *only* printed tracebacks
  (i.e., call stack traces) for uncaught exceptions when explicitly
  passed either the `-v` or `--verbose` options at the command line.
  Clearly, this was bad. While admittedly non-human-readable and thus
  unsightly, tracebacks yield mission-critical insights into critical
  breakage. Tracebacks are often the only means that devs have of
  debugging issues in cloud-hosted continuous integration (CI) workflows
  providing *no* convenient filesystem (and hence logfile) access;
  likewise, tracebacks are the only means that end users have of
  forwarding tracebacks to devs for subsequent debugging. BETSE now
  *always* prints tracebacks to standard error (stderr)
  regardless of options passed at the command line *or* defined in a
  configuration file.

## Issues Resolved.

* **Matplotlib stream plotting exception.** An exception previously
  raised by Matplotlib on animating streamplots has been resolved.
* **NumPy auto-object array deprecations.** All currently non-fatal
  `numpy.VisibleDeprecationWarning` warnings resulting from NumPy's
  recent deprecation of **auto-object arrays** (i.e., the implicit
  creation of one-dimensional NumPy arrays of Python `list` objects when
  passed ragged `list` of `list` objects with *no* uniform length) have
  been resolved. Where possible, these arrays have been reverted to
  standard non-NumPy `list` of `list` objects; in all other cases, these
  arrays have been explicitly coerced into non-auto object arrays.
* **Widespread deprecations.** A slew of other currently non-fatal
  deprecation warnings emitted by various third-party dependencies of
  BETSE have similarly been resolved.

## Installation Improved

* **Install-time Python version enforced.** The minimum mandatory
  version of Python required by this project is now enforced at
  `setuptools`-based install time via the recently introduced
  `python_requires` `setup(`) key in our top-level `setup.py` installer.
* **pypa/setuptools#2353 and pypa/pip#6264.** This release resolves
  recent catastrophic upstream breakage introduced by `setuptools` 50.0
  and `pip` 22.2.0, the newest stable release of everyone's least
  favourite build tools. Sadly, doing so requires temporarily disabling
  project-wide support for the tooling-agnostic `pyproject.toml` file --
  which `setuptools` and `pip` continually demonstrate that they are
  unwilling to sanely support.
* **`setuptools` entry point.** The `betse` command installed by our
  top-level `setup.py` installer now correctly runs. Previously, our
  installer inadvertently produced a broken `betse` command by
  incorrectly monkey-patching the `setuptools` installation process.

## Tests Improved

* **`pytest` warning resolved.** BETSE's test suite no longer issues a
  non-fatal warning under recent `pytest` versions. Specifically, our
  top-level `pytest.ini` configuration file now explicitly lists *all*
  custom `pytest` marks applied by our test suite.
* **`pytest` warnings filters.** BETSE now defers to `pytest` warnings
  filters when detected as running under `pytest` at test-time,
  preventing BETSE's custom warnings filters from silently overwriting
  those predefined by `pytest`. Most test harnesses (including `pytest`)
  define sane default warnings filters as well as enabling users to
  externally configure warnings filters from project-wide configuration
  files. Ergo, the `pytest` harness knows better than we do.
* **`tox` venv isolation validation.** BETSE's test suite now sports
  significantly improved `tox`-specific validation of whether this suite
  is safely isolated to a virtual environment (venv), avoiding spurious
  test failures with otherwise valid pipelines. Specifically:
  * The top-level `pytest`-specific `conftest.py` plugin has been
    generalized by:
    * Refactoring the existing private `_clean_imports()` function to:
      * Treat zipfiles on `sys.path` *not* isolated to the current `tox`
        venv as effectively isolated anyway, as zipfiles are effectively
        isolated from filesystem modification -- notably, `pip`- and
        `setuptools`-based package installation.
      * Reorder `sys.path` so as to shift import paths *not* isolated to
        the current `tox` venv to the end of this list, thus
        deprioritizing (but *not* removing) these paths.
    * Removed the obsolete private `_print_metadata()` function, most of
      which now resides in the `_clean_imports()` function.
* **PyPy testing disabled.** BETSE's test suite has (hopefully
  temporarily) disabled all testing of PyPy. Sadly, scientific
  dependencies (including NumPy) are *not* sanely installable under
  macOS + PyPy. macOS ships with Accelerate, blatantly broken
  macOS-specific BLAS and LAPACK shared libraries that fundamentally
  break NumPy on installation. Since NumPy fails to ship macOS + PyPy
  wheels, NumPy installation under macOS + PyPy requires building NumPy
  from source against Accelerate, which then painfully fails. For now,
  disabling PyPy testing entirely is the only sensible choice.
* **macOS test compatibility,** including:
  * The mostly incidental `test_dirs_get_mtime_newest()` unit test is
    now skipped under Apple macOS – due to what appear to be
    inconsistencies in the handling of nanosecond-resolution path
    timestamps under the macOS-specific HFS+ filesystem.

(*Infallible infancy bellows the fancy libel!*)
@khiz678
Copy link

khiz678 commented Jul 14, 2022

Inside a Debian GNU/Linux 10 (buster) Docker container we create a virtual-env with --system-site-packages
Inside we have pip == 19.2.1
We are using pyproject.toml, requirements.txt and setup.cfg and install the latest setuptools == 63.2.0 using the pyproject.toml

We have the following code in the setup.cfg:

[options]
packages = find:
install_requires = file: requirements.txt

Now we hit the error where the get_requires_for_build_wheel fails with parsing error of the above setup.cfg.

File "/usr/lib/python3/dist-packages/pkg_resources/_vendor/packaging/requirements.py", line 94, in __init__
      requirement_string[e.loc:e.loc + 8]))
      pkg_resources.extern.packaging.requirements.InvalidRequirement: Invalid requirement, parse error at "': requir'"

Upon inspection we found out that pip instead of loading the latest setuptools from the build environment loaded the setuptools == 40.8.0 from dist-packages and used the build_meta from
/usr/lib/python3/dist-packages/setuptools/build_meta.py

For those struggling with same bug using pip and venv on Debian distros, the current workaround we are using is to either uninstall the python3-setuptools or try to use the --no-build-isolation flag with pip

@AkechiShiro
Copy link

AkechiShiro commented Jul 15, 2022

Is there anyone working on a fix for this issue it seems to be open for awhile, is there any relevant PR to fix issues here, it doesn't look like easy to provide a minimal working example tho.

I'm on ArchLinux and have encountered this issue btw while installing/adding Pendulum to my dependencies using Poetry.

@pfmoore
Copy link
Member

pfmoore commented Jul 15, 2022

@AkechiShiro not that I know of. The comment above from @IRDonch suggests a possible fix, but we'd need a test, so working out how to reproduce this is still a blocker here (as is someone actually preparing a PR for it, I don't believe any of the pip developers are working on it).

@AkechiShiro
Copy link

Thanks @pfmoore, could anyone guide me where I could try and dev this fix, in which folders is the buggy code, in the coming months, I hope I can get to fix this, I'm just not very knowledgeable with the code base, it's my first time working on pip, I'll be looking at the CONTRIBUTING.md probably present in the repo.

@SpecLad
Copy link
Contributor

SpecLad commented Jul 15, 2022

The comment above from @IRDonch suggests a possible fix

FYI, I tried to implement this fix, but I was blocked by #8273. virtualenv 19 includes a custom site module, which doesn't implement the getsitepackages function.

@minrk
Copy link
Contributor

minrk commented Sep 21, 2022

FWIW, this appears to affect mac system Python (macOS 12.6, Python 3.9.6) as well.

pyproject.toml
[build-system]
requires = [
    "setuptools>=60",
]
build-backend = "setuptools.build_meta"

[project]
version = "0.1.0"
requires-python = ">=3.7"
license = {text = "MIT License"}
name = "debug"
description = "..."
setup.py
from setuptools import setup
import setuptools
import sys

print("\n\n")
print(f"in setup.py: {setuptools.__version__=}, {setuptools.__file__=}")
path_lines = '\n  '.join(sys.path)
print(f"sys.path=\n  {path_lines}")
print("\n\n")

setup()
pip list
$ /usr/bin/python3 -m pip install --upgrade --user setuptools pip
Requirement already satisfied: setuptools in /Users/minrk/Library/Python/3.9/lib/python/site-packages (65.3.0)
Requirement already satisfied: pip in /Users/minrk/Library/Python/3.9/lib/python/site-packages (22.2.2)
$ /usr/bin/python3 -m pip list
Package    Version
---------- -------
altgraph   0.17.2
future     0.18.2
macholib   1.15.2
pip        22.2.2
setuptools 65.3.0
six        1.15.0
UNKNOWN    0.0.0
wheel      0.37.0
Building wheel with pip:
$ /usr/bin/python3 -m pip wheel -v .
Processing /private/tmp/test-package
  Installing build dependencies: started
  Running command pip subprocess to install build dependencies
  Collecting setuptools>=60
    Using cached setuptools-65.3.0-py3-none-any.whl (1.2 MB)
  Installing collected packages: setuptools
  Successfully installed setuptools-65.3.0
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Running command Getting requirements to build wheel



  in setup.py: setuptools.__version__='58.0.4', setuptools.__file__='/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages/setuptools/__init__.py'
  sys.path=
    /Users/minrk/Library/Python/3.9/lib/python/site-packages/pip/_vendor/pep517/in_process
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-y1d328ei/site
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python39.zip
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/lib-dynload
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-y1d328ei/overlay/lib/python3.9/site-packages
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-y1d328ei/normal/lib/python3.9/site-packages



  running egg_info
  writing manifest file 'UNKNOWN.egg-info/SOURCES.txt'
  Getting requirements to build wheel: finished with status 'done'
  Installing backend dependencies: started
  Running command pip subprocess to install backend dependencies
  Collecting wheel
    Using cached wheel-0.37.1-py2.py3-none-any.whl (35 kB)
  Installing collected packages: wheel
  Successfully installed wheel-0.37.1
  Installing backend dependencies: finished with status 'done'
  Preparing metadata (pyproject.toml): started
  Running command Preparing metadata (pyproject.toml)



  in setup.py: setuptools.__version__='58.0.4', setuptools.__file__='/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages/setuptools/__init__.py'
  sys.path=
    /Users/minrk/Library/Python/3.9/lib/python/site-packages/pip/_vendor/pep517/in_process
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-y1d328ei/site
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python39.zip
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/lib-dynload
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-y1d328ei/overlay/lib/python3.9/site-packages
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-y1d328ei/normal/lib/python3.9/site-packages



  running dist_info
  creating /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-emod82r0/UNKNOWN.egg-info
  writing manifest file '/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-emod82r0/UNKNOWN.egg-info/SOURCES.txt'
  writing manifest file '/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-emod82r0/UNKNOWN.egg-info/SOURCES.txt'
  Preparing metadata (pyproject.toml): finished with status 'done'
Building wheels for collected packages: UNKNOWN
  Building wheel for UNKNOWN (pyproject.toml): started
  Running command Building wheel for UNKNOWN (pyproject.toml)



  in setup.py: setuptools.__version__='58.0.4', setuptools.__file__='/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages/setuptools/__init__.py'
  sys.path=
    /Users/minrk/Library/Python/3.9/lib/python/site-packages/pip/_vendor/pep517/in_process
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-y1d328ei/site
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python39.zip
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/lib-dynload
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-y1d328ei/overlay/lib/python3.9/site-packages
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-y1d328ei/normal/lib/python3.9/site-packages



  running bdist_wheel
  running build
  running install
  running install_egg_info
  running egg_info
  writing manifest file 'UNKNOWN.egg-info/SOURCES.txt'
  Copying UNKNOWN.egg-info to build/bdist.macosx-10.9-universal2/wheel/UNKNOWN-0.0.0-py3.9.egg-info
  running install_scripts
  Building wheel for UNKNOWN (pyproject.toml): finished with status 'done'
  Created wheel for UNKNOWN: filename=UNKNOWN-0.0.0-py3-none-any.whl size=964 sha256=75197df67b739145c46f3017b89c662f98118e90f27a93a29a356b76b7b10af0
  Stored in directory: /Users/minrk/Library/Caches/pip/wheels/63/83/5c/e98bf9706ef6a83be6f3ec105be9771fbd8f4d9d70f9257288
Successfully built UNKNOWN
And again without build isolation, fixes the issue:
$ /usr/bin/python3 -m pip wheel -v --no-build-isolation .
Processing /private/tmp/test-package
  Preparing metadata (pyproject.toml): started
  Running command Preparing metadata (pyproject.toml)



  in setup.py: setuptools.__version__='65.3.0', setuptools.__file__='/Users/minrk/Library/Python/3.9/lib/python/site-packages/setuptools/__init__.py'
  sys.path=
    /Users/minrk/Library/Python/3.9/lib/python/site-packages/pip/_vendor/pep517/in_process
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python39.zip
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/lib-dynload
    /Users/minrk/Library/Python/3.9/lib/python/site-packages
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages



  running dist_info
  creating /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-vazupnbh/debug.egg-info
  writing /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-vazupnbh/debug.egg-info/PKG-INFO
  writing dependency_links to /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-vazupnbh/debug.egg-info/dependency_links.txt
  writing top-level names to /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-vazupnbh/debug.egg-info/top_level.txt
  writing manifest file '/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-vazupnbh/debug.egg-info/SOURCES.txt'
  reading manifest file '/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-vazupnbh/debug.egg-info/SOURCES.txt'
  writing manifest file '/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-vazupnbh/debug.egg-info/SOURCES.txt'
  creating '/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-vazupnbh/debug-0.1.0.dist-info'
  Preparing metadata (pyproject.toml): finished with status 'done'
Building wheels for collected packages: debug
  Building wheel for debug (pyproject.toml): started
  Running command Building wheel for debug (pyproject.toml)



  in setup.py: setuptools.__version__='65.3.0', setuptools.__file__='/Users/minrk/Library/Python/3.9/lib/python/site-packages/setuptools/__init__.py'
  sys.path=
    /Users/minrk/Library/Python/3.9/lib/python/site-packages/pip/_vendor/pep517/in_process
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python39.zip
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/lib-dynload
    /Users/minrk/Library/Python/3.9/lib/python/site-packages
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages



  running bdist_wheel
  running build
  installing to build/bdist.macosx-10.9-universal2/wheel
  running install
  running install_egg_info
  running egg_info
  creating debug.egg-info
  writing debug.egg-info/PKG-INFO
  writing dependency_links to debug.egg-info/dependency_links.txt
  writing top-level names to debug.egg-info/top_level.txt
  writing manifest file 'debug.egg-info/SOURCES.txt'
  reading manifest file 'debug.egg-info/SOURCES.txt'
  writing manifest file 'debug.egg-info/SOURCES.txt'
  Copying debug.egg-info to build/bdist.macosx-10.9-universal2/wheel/debug-0.1.0-py3.9.egg-info
  running install_scripts
  creating build/bdist.macosx-10.9-universal2/wheel/debug-0.1.0.dist-info/WHEEL
  creating '/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-wheel-buzyl83a/tmped7n05ks/debug-0.1.0-py3-none-any.whl' and adding 'build/bdist.macosx-10.9-universal2/wheel' to it
  adding 'debug-0.1.0.dist-info/METADATA'
  adding 'debug-0.1.0.dist-info/WHEEL'
  adding 'debug-0.1.0.dist-info/top_level.txt'
  adding 'debug-0.1.0.dist-info/RECORD'
  removing build/bdist.macosx-10.9-universal2/wheel
  Building wheel for debug (pyproject.toml): finished with status 'done'
  Created wheel for debug: filename=debug-0.1.0-py3-none-any.whl size=957 sha256=8c9826d6865bb428a68051a817b34b1f87844cf9fa367b8379674d1fca9c381e
  Stored in directory: /Users/minrk/Library/Caches/pip/wheels/63/83/5c/e98bf9706ef6a83be6f3ec105be9771fbd8f4d9d70f9257288
Successfully built debug
EDIT: running in a venv _does_ help
$  /usr/bin/python3 -m venv /tmp/debug-env
$ source /tmp/debug-env/bin/activate
(debug-env) $  python3 -m pip wheel -v .
Processing /Users/minrk/dev/py/6d73fc9159448f1f83f8a6d5c2b2dfac
  Installing build dependencies: started
  Running command pip subprocess to install build dependencies
  Collecting setuptools>=60
    Using cached setuptools-65.3.0-py3-none-any.whl (1.2 MB)
  Installing collected packages: setuptools
  Successfully installed setuptools-65.3.0
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Running command Getting requirements to build wheel



  in setup.py: setuptools.__version__='65.3.0', setuptools.__file__='/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-e83b76k7/overlay/lib/python3.9/site-packages/setuptools/__init__.py'
  sys.path=
    /private/tmp/debug-env/lib/python3.9/site-packages/pip/_vendor/pep517/in_process
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-e83b76k7/site
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python39.zip
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/lib-dynload
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-e83b76k7/overlay/lib/python3.9/site-packages
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-e83b76k7/normal/lib/python3.9/site-packages
  site.getsitepackages()=
    /private/tmp/debug-env/lib/python3.9/site-packages



  running egg_info
  writing debug.egg-info/PKG-INFO
  writing dependency_links to debug.egg-info/dependency_links.txt
  writing top-level names to debug.egg-info/top_level.txt
  reading manifest file 'debug.egg-info/SOURCES.txt'
  writing manifest file 'debug.egg-info/SOURCES.txt'
  Getting requirements to build wheel: finished with status 'done'
  Installing backend dependencies: started
  Running command pip subprocess to install backend dependencies
  Collecting wheel
    Using cached wheel-0.37.1-py2.py3-none-any.whl (35 kB)
  Installing collected packages: wheel
  Successfully installed wheel-0.37.1
  Installing backend dependencies: finished with status 'done'
  Preparing metadata (pyproject.toml): started
  Running command Preparing metadata (pyproject.toml)



  in setup.py: setuptools.__version__='65.3.0', setuptools.__file__='/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-e83b76k7/overlay/lib/python3.9/site-packages/setuptools/__init__.py'
  sys.path=
    /private/tmp/debug-env/lib/python3.9/site-packages/pip/_vendor/pep517/in_process
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-e83b76k7/site
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python39.zip
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/lib-dynload
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-e83b76k7/overlay/lib/python3.9/site-packages
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-e83b76k7/normal/lib/python3.9/site-packages
  site.getsitepackages()=
    /private/tmp/debug-env/lib/python3.9/site-packages



  running dist_info
  creating /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-knoxvi11/debug.egg-info
  writing /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-knoxvi11/debug.egg-info/PKG-INFO
  writing dependency_links to /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-knoxvi11/debug.egg-info/dependency_links.txt
  writing top-level names to /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-knoxvi11/debug.egg-info/top_level.txt
  writing manifest file '/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-knoxvi11/debug.egg-info/SOURCES.txt'
  reading manifest file '/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-knoxvi11/debug.egg-info/SOURCES.txt'
  writing manifest file '/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-knoxvi11/debug.egg-info/SOURCES.txt'
  creating '/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-modern-metadata-knoxvi11/debug-0.1.0.dist-info'
  Preparing metadata (pyproject.toml): finished with status 'done'
Building wheels for collected packages: debug
  Building wheel for debug (pyproject.toml): started
  Running command Building wheel for debug (pyproject.toml)



  in setup.py: setuptools.__version__='65.3.0', setuptools.__file__='/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-e83b76k7/overlay/lib/python3.9/site-packages/setuptools/__init__.py'
  sys.path=
    /private/tmp/debug-env/lib/python3.9/site-packages/pip/_vendor/pep517/in_process
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-e83b76k7/site
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python39.zip
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9
    /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/lib-dynload
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-e83b76k7/overlay/lib/python3.9/site-packages
    /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-build-env-e83b76k7/normal/lib/python3.9/site-packages
  site.getsitepackages()=
    /private/tmp/debug-env/lib/python3.9/site-packages



  running bdist_wheel
  running build
  installing to build/bdist.macosx-10.9-universal2/wheel
  running install
  running install_egg_info
  running egg_info
  writing debug.egg-info/PKG-INFO
  writing dependency_links to debug.egg-info/dependency_links.txt
  writing top-level names to debug.egg-info/top_level.txt
  reading manifest file 'debug.egg-info/SOURCES.txt'
  writing manifest file 'debug.egg-info/SOURCES.txt'
  Copying debug.egg-info to build/bdist.macosx-10.9-universal2/wheel/debug-0.1.0-py3.9.egg-info
  running install_scripts
  creating build/bdist.macosx-10.9-universal2/wheel/debug-0.1.0.dist-info/WHEEL
  creating '/private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-wheel-9il5vyyn/tmp6zqsfanh/debug-0.1.0-py3-none-any.whl' and adding 'build/bdist.macosx-10.9-universal2/wheel' to it
  adding 'debug-0.1.0.dist-info/METADATA'
  adding 'debug-0.1.0.dist-info/WHEEL'
  adding 'debug-0.1.0.dist-info/top_level.txt'
  adding 'debug-0.1.0.dist-info/RECORD'
  removing build/bdist.macosx-10.9-universal2/wheel
  Building wheel for debug (pyproject.toml): finished with status 'done'
  Created wheel for debug: filename=debug-0.1.0-py3-none-any.whl size=959 sha256=b5f9cb097a864dd577a7cea3f7805b913d1968bbad235754d9d0293ded1e361c
  Stored in directory: /private/var/folders/qr/3vxfnp1x2t1fw55dr288mphc0000gn/T/pip-ephem-wheel-cache-qx6qpam5/wheels/0b/37/75/5000e2f11e9ea9460d2d869496734ee8dffb476f3090f04947
Successfully built debug

@minrk
Copy link
Contributor

minrk commented Sep 21, 2022

Minimal repro with docker on ubuntu:22.04: https://gist.github.com/minrk/6d73fc9159448f1f83f8a6d5c2b2dfac

@fredthomsen
Copy link

I am seeing the system-wide paths have the wrong precedence: /usr/lib/python3.6/site-packages/* take precedence over the /usr/local/lib/python3.6/* for building my package for a tox environment in this case. Does that fall in line with what others are seeing?

@minrk
Copy link
Contributor

minrk commented Sep 23, 2022

It seems to me that the simplest fix would be to remove all directories in site.getsitepackages() from sys.path and not just platlib/purelib.

#11466 uses site.getsitepackages() if available, and falls back on the current behavior in the case where it isn't (i.e. virtualenv<20). I've confirmed at least that it fixes the issue I'm seeing on system Python in Ubuntu and macOS.

jacklovell added a commit to cherab/core that referenced this issue Oct 13, 2022
inmantaci pushed a commit to inmanta/inmanta-core that referenced this issue Oct 17, 2022
Bumps [pip](https://github.com/pypa/pip) from 22.2.2 to 22.3.
<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>22.3 (2022-10-15)</h1>
<h2>Deprecations and Removals</h2>
<ul>
<li>Deprecate <code>--install-options</code> which forces pip to use the deprecated <code>install</code>
command of <code>setuptools</code>. (<code>[#11358](pypa/pip#11358) &lt;https://github.com/pypa/pip/issues/11358&gt;</code>_)</li>
<li>Deprecate installation with 'setup.py install' when no-binary is enabled for
source distributions without 'pyproject.toml'. (<code>[#11452](pypa/pip#11452) &lt;https://github.com/pypa/pip/issues/11452&gt;</code>_)</li>
<li>Deprecate ```--no-binary`` disabling the wheel cache. (<code>[#11454](pypa/pip#11454) &lt;https://github.com/pypa/pip/issues/11454&gt;</code>_)</li>
<li>Remove <code>--use-feature=2020-resolver</code> opt-in flag. This was supposed to be removed in 21.0, but missed during that release cycle. (<code>[#11493](pypa/pip#11493) &lt;https://github.com/pypa/pip/issues/11493&gt;</code>_)</li>
<li>Deprecate installation with 'setup.py install' when the 'wheel' package is absent for
source distributions without 'pyproject.toml'. (<code>[#8559](pypa/pip#8559) &lt;https://github.com/pypa/pip/issues/8559&gt;</code>_)</li>
<li>Remove the ability to use <code>pip list --outdated</code> in combination with <code>--format=freeze</code>. (<code>[#9789](pypa/pip#9789) &lt;https://github.com/pypa/pip/issues/9789&gt;</code>_)</li>
</ul>
<h2>Features</h2>
<ul>
<li>Use <code>shell=True</code> for opening the editor with <code>pip config edit</code>. (<code>[#10716](pypa/pip#10716) &lt;https://github.com/pypa/pip/issues/10716&gt;</code>_)</li>
<li>Use the <code>data-dist-info-metadata</code> attribute from :pep:<code>658</code> to resolve distribution metadata without downloading the dist yet. (<code>[#11111](pypa/pip#11111) &lt;https://github.com/pypa/pip/issues/11111&gt;</code>_)</li>
<li>Add an option to run the test suite with pip built as a zipapp. (<code>[#11250](pypa/pip#11250) &lt;https://github.com/pypa/pip/issues/11250&gt;</code>_)</li>
<li>Add a <code>--python</code> option to allow pip to manage Python environments other
than the one pip is installed in. (<code>[#11320](pypa/pip#11320) &lt;https://github.com/pypa/pip/issues/11320&gt;</code>_)</li>
<li>Document the new (experimental) zipapp distribution of pip. (<code>[#11459](pypa/pip#11459) &lt;https://github.com/pypa/pip/issues/11459&gt;</code>_)</li>
<li>Use the much faster 'bzr co --lightweight' to obtain a copy of a Bazaar tree. (<code>[#5444](pypa/pip#5444) &lt;https://github.com/pypa/pip/issues/5444&gt;</code>_)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>Fix <code>--no-index</code> when <code>--index-url</code> or <code>--extra-index-url</code> is specified
inside a requirements file. (<code>[#11276](pypa/pip#11276) &lt;https://github.com/pypa/pip/issues/11276&gt;</code>_)</li>
<li>Ensure that the candidate <code>pip</code> executable exists, when checking for a new version of pip. (<code>[#11309](pypa/pip#11309) &lt;https://github.com/pypa/pip/issues/11309&gt;</code>_)</li>
<li>Ignore distributions with invalid <code>Name</code> in metadata instead of crashing, when
using the <code>importlib.metadata</code> backend. (<code>[#11352](pypa/pip#11352) &lt;https://github.com/pypa/pip/issues/11352&gt;</code>_)</li>
<li>Raise RequirementsFileParseError when parsing malformed requirements options that can't be sucessfully parsed by shlex. (<code>[#11491](pypa/pip#11491) &lt;https://github.com/pypa/pip/issues/11491&gt;</code>_)</li>
<li>Fix build environment isolation on some system Pythons. (<code>[#6264](pypa/pip#6264) &lt;https://github.com/pypa/pip/issues/6264&gt;</code>_)</li>
</ul>
<h2>Vendored Libraries</h2>
<ul>
<li>Upgrade certifi to 2022.9.24</li>
<li>Upgrade distlib to 0.3.6</li>
<li>Upgrade idna to 3.4</li>
<li>Upgrade pep517 to 0.13.0</li>
<li>Upgrade pygments to 2.13.0</li>
<li>Upgrade tenacity to 8.1.0</li>
<li>Upgrade typing_extensions to 4.4.0</li>
<li>Upgrade urllib3 to 1.26.12</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/pypa/pip/commit/0a76da3a94130fad58b086e331c3d3e1b02a89eb"><code>0a76da3</code></a> Bump for release</li>
<li><a href="https://github.com/pypa/pip/commit/25638287f8b8bd571a10c4f5ae1b7f4eae454dcc"><code>2563828</code></a> Update AUTHORS.txt</li>
<li><a href="https://github.com/pypa/pip/commit/e86f27fe4ee3fe45fc0fcd2372f71d39d1d013c1"><code>e86f27f</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/11493">#11493</a> from pradyunsg/remove-2020-resolver-opt-in</li>
<li><a href="https://github.com/pypa/pip/commit/1fcc3ce4b531ac6bc80c1d102d4ef9610074e195"><code>1fcc3ce</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/11514">#11514</a> from pradyunsg/certifi-update</li>
<li><a href="https://github.com/pypa/pip/commit/65c23fa99d19af8ebd375e7129213794dce4b4b2"><code>65c23fa</code></a> Unnormalise the certifi version</li>
<li><a href="https://github.com/pypa/pip/commit/739158cc80f138dbed9e426f3408811acef2d993"><code>739158c</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/11516">#11516</a> from pradyunsg/check-manifest</li>
<li><a href="https://github.com/pypa/pip/commit/4e48bbc31cf34b1b4ccd100a787d1204ddb8866b"><code>4e48bbc</code></a> Move check-manifest to a CI check</li>
<li><a href="https://github.com/pypa/pip/commit/1b7e5ef34f926f33fa7932239229220dd65eb7a6"><code>1b7e5ef</code></a> Upgrade certifi to 2022.9.24</li>
<li><a href="https://github.com/pypa/pip/commit/2a0552ac61ee26df04e08e21943a1e36aa880db1"><code>2a0552a</code></a> Replace complex certifi patch with a more targetted requests patch</li>
<li><a href="https://github.com/pypa/pip/commit/eb906997da97bbbd1f74127297d7ce9a54a6a2a0"><code>eb90699</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/11502">#11502</a> from pradyunsg/vendoring-updates</li>
<li>Additional commits viewable in <a href="https://github.com/pypa/pip/compare/22.2.2...22.3">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=22.2.2&new-version=22.3)](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
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

</details>
inmantaci pushed a commit to inmanta/inmanta-core that referenced this issue Oct 17, 2022
Bumps [pip](https://github.com/pypa/pip) from 22.2.2 to 22.3.
<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>22.3 (2022-10-15)</h1>
<h2>Deprecations and Removals</h2>
<ul>
<li>Deprecate <code>--install-options</code> which forces pip to use the deprecated <code>install</code>
command of <code>setuptools</code>. (<code>[#11358](pypa/pip#11358) &lt;https://github.com/pypa/pip/issues/11358&gt;</code>_)</li>
<li>Deprecate installation with 'setup.py install' when no-binary is enabled for
source distributions without 'pyproject.toml'. (<code>[#11452](pypa/pip#11452) &lt;https://github.com/pypa/pip/issues/11452&gt;</code>_)</li>
<li>Deprecate ```--no-binary`` disabling the wheel cache. (<code>[#11454](pypa/pip#11454) &lt;https://github.com/pypa/pip/issues/11454&gt;</code>_)</li>
<li>Remove <code>--use-feature=2020-resolver</code> opt-in flag. This was supposed to be removed in 21.0, but missed during that release cycle. (<code>[#11493](pypa/pip#11493) &lt;https://github.com/pypa/pip/issues/11493&gt;</code>_)</li>
<li>Deprecate installation with 'setup.py install' when the 'wheel' package is absent for
source distributions without 'pyproject.toml'. (<code>[#8559](pypa/pip#8559) &lt;https://github.com/pypa/pip/issues/8559&gt;</code>_)</li>
<li>Remove the ability to use <code>pip list --outdated</code> in combination with <code>--format=freeze</code>. (<code>[#9789](pypa/pip#9789) &lt;https://github.com/pypa/pip/issues/9789&gt;</code>_)</li>
</ul>
<h2>Features</h2>
<ul>
<li>Use <code>shell=True</code> for opening the editor with <code>pip config edit</code>. (<code>[#10716](pypa/pip#10716) &lt;https://github.com/pypa/pip/issues/10716&gt;</code>_)</li>
<li>Use the <code>data-dist-info-metadata</code> attribute from :pep:<code>658</code> to resolve distribution metadata without downloading the dist yet. (<code>[#11111](pypa/pip#11111) &lt;https://github.com/pypa/pip/issues/11111&gt;</code>_)</li>
<li>Add an option to run the test suite with pip built as a zipapp. (<code>[#11250](pypa/pip#11250) &lt;https://github.com/pypa/pip/issues/11250&gt;</code>_)</li>
<li>Add a <code>--python</code> option to allow pip to manage Python environments other
than the one pip is installed in. (<code>[#11320](pypa/pip#11320) &lt;https://github.com/pypa/pip/issues/11320&gt;</code>_)</li>
<li>Document the new (experimental) zipapp distribution of pip. (<code>[#11459](pypa/pip#11459) &lt;https://github.com/pypa/pip/issues/11459&gt;</code>_)</li>
<li>Use the much faster 'bzr co --lightweight' to obtain a copy of a Bazaar tree. (<code>[#5444](pypa/pip#5444) &lt;https://github.com/pypa/pip/issues/5444&gt;</code>_)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>Fix <code>--no-index</code> when <code>--index-url</code> or <code>--extra-index-url</code> is specified
inside a requirements file. (<code>[#11276](pypa/pip#11276) &lt;https://github.com/pypa/pip/issues/11276&gt;</code>_)</li>
<li>Ensure that the candidate <code>pip</code> executable exists, when checking for a new version of pip. (<code>[#11309](pypa/pip#11309) &lt;https://github.com/pypa/pip/issues/11309&gt;</code>_)</li>
<li>Ignore distributions with invalid <code>Name</code> in metadata instead of crashing, when
using the <code>importlib.metadata</code> backend. (<code>[#11352](pypa/pip#11352) &lt;https://github.com/pypa/pip/issues/11352&gt;</code>_)</li>
<li>Raise RequirementsFileParseError when parsing malformed requirements options that can't be sucessfully parsed by shlex. (<code>[#11491](pypa/pip#11491) &lt;https://github.com/pypa/pip/issues/11491&gt;</code>_)</li>
<li>Fix build environment isolation on some system Pythons. (<code>[#6264](pypa/pip#6264) &lt;https://github.com/pypa/pip/issues/6264&gt;</code>_)</li>
</ul>
<h2>Vendored Libraries</h2>
<ul>
<li>Upgrade certifi to 2022.9.24</li>
<li>Upgrade distlib to 0.3.6</li>
<li>Upgrade idna to 3.4</li>
<li>Upgrade pep517 to 0.13.0</li>
<li>Upgrade pygments to 2.13.0</li>
<li>Upgrade tenacity to 8.1.0</li>
<li>Upgrade typing_extensions to 4.4.0</li>
<li>Upgrade urllib3 to 1.26.12</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/pypa/pip/commit/0a76da3a94130fad58b086e331c3d3e1b02a89eb"><code>0a76da3</code></a> Bump for release</li>
<li><a href="https://github.com/pypa/pip/commit/25638287f8b8bd571a10c4f5ae1b7f4eae454dcc"><code>2563828</code></a> Update AUTHORS.txt</li>
<li><a href="https://github.com/pypa/pip/commit/e86f27fe4ee3fe45fc0fcd2372f71d39d1d013c1"><code>e86f27f</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/11493">#11493</a> from pradyunsg/remove-2020-resolver-opt-in</li>
<li><a href="https://github.com/pypa/pip/commit/1fcc3ce4b531ac6bc80c1d102d4ef9610074e195"><code>1fcc3ce</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/11514">#11514</a> from pradyunsg/certifi-update</li>
<li><a href="https://github.com/pypa/pip/commit/65c23fa99d19af8ebd375e7129213794dce4b4b2"><code>65c23fa</code></a> Unnormalise the certifi version</li>
<li><a href="https://github.com/pypa/pip/commit/739158cc80f138dbed9e426f3408811acef2d993"><code>739158c</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/11516">#11516</a> from pradyunsg/check-manifest</li>
<li><a href="https://github.com/pypa/pip/commit/4e48bbc31cf34b1b4ccd100a787d1204ddb8866b"><code>4e48bbc</code></a> Move check-manifest to a CI check</li>
<li><a href="https://github.com/pypa/pip/commit/1b7e5ef34f926f33fa7932239229220dd65eb7a6"><code>1b7e5ef</code></a> Upgrade certifi to 2022.9.24</li>
<li><a href="https://github.com/pypa/pip/commit/2a0552ac61ee26df04e08e21943a1e36aa880db1"><code>2a0552a</code></a> Replace complex certifi patch with a more targetted requests patch</li>
<li><a href="https://github.com/pypa/pip/commit/eb906997da97bbbd1f74127297d7ce9a54a6a2a0"><code>eb90699</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/11502">#11502</a> from pradyunsg/vendoring-updates</li>
<li>Additional commits viewable in <a href="https://github.com/pypa/pip/compare/22.2.2...22.3">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=22.2.2&new-version=22.3)](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
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

</details>
mergify bot pushed a commit to aws/jsii that referenced this issue Oct 20, 2022
…s/@jsii/python-runtime (#3803)

Updates the requirements on [pip](https://github.com/pypa/pip) to permit the latest version.
<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>22.3 (2022-10-15)</h1>
<h2>Deprecations and Removals</h2>
<ul>
<li>Deprecate <code>--install-options</code> which forces pip to use the deprecated <code>install</code>
command of <code>setuptools</code>. (<code>[#11358](pypa/pip#11358) &lt;https://github.com/pypa/pip/issues/11358&gt;</code>_)</li>
<li>Deprecate installation with 'setup.py install' when no-binary is enabled for
source distributions without 'pyproject.toml'. (<code>[#11452](pypa/pip#11452) &lt;https://github.com/pypa/pip/issues/11452&gt;</code>_)</li>
<li>Deprecate ```--no-binary`` disabling the wheel cache. (<code>[#11454](pypa/pip#11454) &lt;https://github.com/pypa/pip/issues/11454&gt;</code>_)</li>
<li>Remove <code>--use-feature=2020-resolver</code> opt-in flag. This was supposed to be removed in 21.0, but missed during that release cycle. (<code>[#11493](pypa/pip#11493) &lt;https://github.com/pypa/pip/issues/11493&gt;</code>_)</li>
<li>Deprecate installation with 'setup.py install' when the 'wheel' package is absent for
source distributions without 'pyproject.toml'. (<code>[#8559](pypa/pip#8559) &lt;https://github.com/pypa/pip/issues/8559&gt;</code>_)</li>
<li>Remove the ability to use <code>pip list --outdated</code> in combination with <code>--format=freeze</code>. (<code>[#9789](pypa/pip#9789) &lt;https://github.com/pypa/pip/issues/9789&gt;</code>_)</li>
</ul>
<h2>Features</h2>
<ul>
<li>Use <code>shell=True</code> for opening the editor with <code>pip config edit</code>. (<code>[#10716](pypa/pip#10716) &lt;https://github.com/pypa/pip/issues/10716&gt;</code>_)</li>
<li>Use the <code>data-dist-info-metadata</code> attribute from :pep:<code>658</code> to resolve distribution metadata without downloading the dist yet. (<code>[#11111](pypa/pip#11111) &lt;https://github.com/pypa/pip/issues/11111&gt;</code>_)</li>
<li>Add an option to run the test suite with pip built as a zipapp. (<code>[#11250](pypa/pip#11250) &lt;https://github.com/pypa/pip/issues/11250&gt;</code>_)</li>
<li>Add a <code>--python</code> option to allow pip to manage Python environments other
than the one pip is installed in. (<code>[#11320](pypa/pip#11320) &lt;https://github.com/pypa/pip/issues/11320&gt;</code>_)</li>
<li>Document the new (experimental) zipapp distribution of pip. (<code>[#11459](pypa/pip#11459) &lt;https://github.com/pypa/pip/issues/11459&gt;</code>_)</li>
<li>Use the much faster 'bzr co --lightweight' to obtain a copy of a Bazaar tree. (<code>[#5444](pypa/pip#5444) &lt;https://github.com/pypa/pip/issues/5444&gt;</code>_)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>Fix <code>--no-index</code> when <code>--index-url</code> or <code>--extra-index-url</code> is specified
inside a requirements file. (<code>[#11276](pypa/pip#11276) &lt;https://github.com/pypa/pip/issues/11276&gt;</code>_)</li>
<li>Ensure that the candidate <code>pip</code> executable exists, when checking for a new version of pip. (<code>[#11309](pypa/pip#11309) &lt;https://github.com/pypa/pip/issues/11309&gt;</code>_)</li>
<li>Ignore distributions with invalid <code>Name</code> in metadata instead of crashing, when
using the <code>importlib.metadata</code> backend. (<code>[#11352](pypa/pip#11352) &lt;https://github.com/pypa/pip/issues/11352&gt;</code>_)</li>
<li>Raise RequirementsFileParseError when parsing malformed requirements options that can't be sucessfully parsed by shlex. (<code>[#11491](pypa/pip#11491) &lt;https://github.com/pypa/pip/issues/11491&gt;</code>_)</li>
<li>Fix build environment isolation on some system Pythons. (<code>[#6264](pypa/pip#6264) &lt;https://github.com/pypa/pip/issues/6264&gt;</code>_)</li>
</ul>
<h2>Vendored Libraries</h2>
<ul>
<li>Upgrade certifi to 2022.9.24</li>
<li>Upgrade distlib to 0.3.6</li>
<li>Upgrade idna to 3.4</li>
<li>Upgrade pep517 to 0.13.0</li>
<li>Upgrade pygments to 2.13.0</li>
<li>Upgrade tenacity to 8.1.0</li>
<li>Upgrade typing_extensions to 4.4.0</li>
<li>Upgrade urllib3 to 1.26.12</li>
</ul>

</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/pypa/pip/commit/0a76da3a94130fad58b086e331c3d3e1b02a89eb"><code>0a76da3</code></a> Bump for release</li>
<li><a href="https://github.com/pypa/pip/commit/25638287f8b8bd571a10c4f5ae1b7f4eae454dcc"><code>2563828</code></a> Update AUTHORS.txt</li>
<li><a href="https://github.com/pypa/pip/commit/e86f27fe4ee3fe45fc0fcd2372f71d39d1d013c1"><code>e86f27f</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/11493">#11493</a> from pradyunsg/remove-2020-resolver-opt-in</li>
<li><a href="https://github.com/pypa/pip/commit/1fcc3ce4b531ac6bc80c1d102d4ef9610074e195"><code>1fcc3ce</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/11514">#11514</a> from pradyunsg/certifi-update</li>
<li><a href="https://github.com/pypa/pip/commit/65c23fa99d19af8ebd375e7129213794dce4b4b2"><code>65c23fa</code></a> Unnormalise the certifi version</li>
<li><a href="https://github.com/pypa/pip/commit/739158cc80f138dbed9e426f3408811acef2d993"><code>739158c</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/11516">#11516</a> from pradyunsg/check-manifest</li>
<li><a href="https://github.com/pypa/pip/commit/4e48bbc31cf34b1b4ccd100a787d1204ddb8866b"><code>4e48bbc</code></a> Move check-manifest to a CI check</li>
<li><a href="https://github.com/pypa/pip/commit/1b7e5ef34f926f33fa7932239229220dd65eb7a6"><code>1b7e5ef</code></a> Upgrade certifi to 2022.9.24</li>
<li><a href="https://github.com/pypa/pip/commit/2a0552ac61ee26df04e08e21943a1e36aa880db1"><code>2a0552a</code></a> Replace complex certifi patch with a more targetted requests patch</li>
<li><a href="https://github.com/pypa/pip/commit/eb906997da97bbbd1f74127297d7ce9a54a6a2a0"><code>eb90699</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/pip/issues/11502">#11502</a> from pradyunsg/vendoring-updates</li>
<li>Additional commits viewable in <a href="https://github.com/pypa/pip/compare/22.2...22.3">compare view</a></li>
</ul>
</details>
<br />


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
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Oct 26, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
C: PEP 517 impact Affected by PEP 517 processing type: bug A confirmed bug or unintended behavior
Projects
None yet