Repository: periareon/req-compile (language: python)

Issue:
Incremental re-comiples produce different results
It looks like whenever an existing solution is used the compilation results are different

`requirements.in`
```
requests-kerberos==0.14.0
```

Using the `requirements.in` file above we can reproduce this with the following commands

```
req-compile requirements.in --hashes --urls --annotate --verbose
```

`requirements.macos.txt.clean`:

<details>

```
# Compiled by Req-Compile (1.0.0rc21) on 2024-06-22 01:28:42.321036 UTC
#
# Inputs:
# requirements.in
#
# Repositories (this annotation produced by --annotate):
# [0] <default index> https://pypi.org/simple

certifi==2024.6.2 \
    --hash=sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56
    # [0]
    # via requests (>=2017.4.17)
    # https://files.pythonhosted.org/packages/5b/11/1e78951465b4a225519b8c3ad29769c49e0d8d157a070f681d5b6d64737f/certifi-2024.6.2-py3-none-any.whl#sha256=ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56
cffi==1.16.0 \
    --hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417
    # [0]
    # via cryptography (>=1.12)
    # https://files.pythonhosted.org/packages/18/6c/0406611f3d5aadf4c5b08f6c095d874aed8dfc2d3a19892707d72536d5dc/cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl#sha256=1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417
charset-normalizer==3.3.2 \
    --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e
    # [0]
    # via requests (<4,>=2)
    # https://files.pythonhosted.org/packages/dd/51/68b61b90b24ca35495956b718f35a9756ef7d3dd4b3c1508056fa98d1a1b/charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl#sha256=549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e
cryptography==42.0.8 \
    --hash=sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28
    # [0]
    # via
    #   pyspnego
    #   requests-kerberos (>=1.3)
    # https://files.pythonhosted.org/packages/60/12/f064af29190cdb1d38fe07f3db6126091639e1dece7ec77c4ff037d49193/cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl#sha256=dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28
decorator==5.1.1 \
    --hash=sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186
    # [0]
    # via gssapi
    # https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl#sha256=b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186
gssapi==1.8.3 \
    --hash=sha256:ca6ceb17fc15eda2a69f2e8c6cf10d11e2edb32832255e5d4c65b21b6db4680a
    # [0]
    # via pyspnego[kerberos] (>=1.6.0)
    # https://files.pythonhosted.org/packages/0a/c4/3b62db3b869e6a655f1d95f1ffe8a05777df32ed2b786da0ba963d863d45/gssapi-1.8.3-cp311-cp311-macosx_11_0_arm64.whl#sha256=ca6ceb17fc15eda2a69f2e8c6cf10d11e2edb32832255e5d4c65b21b6db4680a
idna==3.7 \
    --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0
    # [0]
    # via requests (<4,>=2.5)
    # https://files.pythonhosted.org/packages/e5/3e/741d8c82801c347547f8a2a06aa57dbb1992be9e948df2ea0eda2c8b79e8/idna-3.7-py3-none-any.whl#sha256=82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0
krb5==0.5.1 \
    --hash=sha256:2269fb6c0813cd7f58526a152d746aebb8e48026b92856093865414395c185e9
    # [0]
    # via pyspnego[kerberos] (>=0.3.0)
    # https://files.pythonhosted.org/packages/13/9b/1cdca966e543624a44c77e106c6d4bdf0e9a0f46694f8f5ce092742a31c9/krb5-0.5.1-cp311-cp311-macosx_11_0_arm64.whl#sha256=2269fb6c0813cd7f58526a152d746aebb8e48026b92856093865414395c185e9
pycparser==2.22 \
    --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
    # [0]
    # via cffi
    # https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl#sha256=c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
pyspnego==0.11.0 \
    --hash=sha256:cdfe9af7b19749d692e02fd4bd1b4b71d44ecb8dd9b2474abb0f3d90f6154e7e
    # [0]
    # via requests-kerberos
    # https://files.pythonhosted.org/packages/02/91/9ef6d9425e888f3e7e67301ab9ffd4aad027f667384405f9c3fa30027de3/pyspnego-0.11.0-py3-none-any.whl#sha256=cdfe9af7b19749d692e02fd4bd1b4b71d44ecb8dd9b2474abb0f3d90f6154e7e
requests==2.32.3 \
    --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6
    # [0]
    # via requests-kerberos (>=1.1.0)
    # https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl#sha256=70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6
requests-kerberos==0.14.0 \
    --hash=sha256:da74ea478ccd8584de88092bdcd17a7c29d494374a340d1d8677189903c9ac6a
    # [0]
    # via requirements.in (==0.14.0)
    # https://files.pythonhosted.org/packages/13/3b/42c51612c9d46de37bdae19f2290848e17ee4fa38a63f37f1d46b7660510/requests_kerberos-0.14.0-py2.py3-none-any.whl#sha256=da74ea478ccd8584de88092bdcd17a7c29d494374a340d1d8677189903c9ac6a
urllib3==2.2.2 \
    --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472
    # [0]
    # via requests (<3,>=1.21.1)
    # https://files.pythonhosted.org/packages/ca/1c/89ffc63a9605b583d5df2be791a27bc1a42b7c32bab68d3c8f2f73a98cd4/urllib3-2.2.2-py3-none-any.whl#sha256=a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472
```

</details>

(verbose logs)

<details>

```
DEBUG:req_compile.dists:Adding dist: requirements.in None None
DEBUG:req_compile.dists:Adding dist: requests-kerberos requirements.in requests-kerberos==0.14.0
DEBUG:req_compile.compile:Processing node requirements.in
DEBUG:req_compile.compile:Processing node requests_kerberos [UNSOLVED]
INFO:req_compile.repository.pypi:Getting candidate for requests-kerberos==0.14.0
INFO:req_compile.repository.pypi:Fetching versions for requests-kerberos from https://pypi.org/simple/requests-kerberos
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): pypi.org:443
DEBUG:urllib3.connectionpool:https://pypi.org:443 "GET /simple/requests-kerberos/ HTTP/1.1" 200 3700
DEBUG:req_compile.repository.pypi:No file in wheel-dir
INFO:req_compile.repository.pypi:Downloading https://files.pythonhosted.org/packages/13/3b/42c51612c9d46de37bdae19f2290848e17ee4fa38a63f37f1d46b7660510/requests_kerberos-0.14.0-py2.py3-none-any.whl#sha256=da74ea478ccd8584de88092bdcd17a7c29d494374a340d1d8677189903c9ac6a -> /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/requests_kerberos-0.14.0-py2.py3-none-any.whl
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): files.pythonhosted.org:443
DEBUG:urllib3.connectionpool:https://files.pythonhosted.org:443 "GET /packages/13/3b/42c51612c9d46de37bdae19f2290848e17ee4fa38a63f37f1d46b7660510/requests_kerberos-0.14.0-py2.py3-none-any.whl HTTP/1.1" 200 11581
INFO:req_compile.metadata:Extracting metadata for /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/requests_kerberos-0.14.0-py2.py3-none-any.whl
DEBUG:req_compile.metadata:Extracting from wheel
DEBUG:req_compile.metadata.dist_info:Found dist-info in the zip: requests_kerberos-0.14.0.dist-info/METADATA (with regex ^(.+/)?requests_kerberos-.+\.dist-info/METADATA$)
DEBUG:req_compile.compile:Acquired candidate requests-kerberos==0.14.0 requests-kerberos==0.14.0 [<default index> https://pypi.org/simple] (download)
DEBUG:req_compile.dists:Adding dist: requests-kerberos==0.14.0 requirements.in requests-kerberos==0.14.0
DEBUG:req_compile.dists:Adding dist: requests requests-kerberos==0.14.0 requests>=1.1.0
DEBUG:req_compile.dists:Adding dist: cryptography requests-kerberos==0.14.0 cryptography>=1.3
DEBUG:req_compile.dists:Adding dist: pyspnego requests-kerberos==0.14.0 pyspnego[kerberos]
DEBUG:req_compile.compile:Processing node requests-kerberos==0.14.0
DEBUG:req_compile.compile:Processing node cryptography [UNSOLVED]
INFO:req_compile.repository.pypi:Getting candidate for cryptography>=1.3
INFO:req_compile.repository.pypi:Fetching versions for cryptography from https://pypi.org/simple/cryptography
DEBUG:urllib3.connectionpool:https://pypi.org:443 "GET /simple/cryptography/ HTTP/1.1" 200 250543
DEBUG:req_compile.repository.pypi:No file in wheel-dir
INFO:req_compile.repository.pypi:Downloading https://files.pythonhosted.org/packages/60/12/f064af29190cdb1d38fe07f3db6126091639e1dece7ec77c4ff037d49193/cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl#sha256=dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28 -> /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl
DEBUG:urllib3.connectionpool:https://files.pythonhosted.org:443 "GET /packages/60/12/f064af29190cdb1d38fe07f3db6126091639e1dece7ec77c4ff037d49193/cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl HTTP/1.1" 200 5901232
INFO:req_compile.metadata:Extracting metadata for /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl
DEBUG:req_compile.metadata:Extracting from wheel
DEBUG:req_compile.metadata.dist_info:Found dist-info in the zip: cryptography-42.0.8.dist-info/METADATA (with regex ^(.+/)?cryptography-.+\.dist-info/METADATA$)
DEBUG:req_compile.compile:Acquired candidate cryptography==42.0.8 cryptography>=1.3 [<default index> https://pypi.org/simple] (download)
DEBUG:req_compile.dists:Adding dist: cryptography==42.0.8 requests-kerberos==0.14.0 cryptography>=1.3
DEBUG:req_compile.dists:Adding dist: cffi cryptography==42.0.8 cffi>=1.12; platform_python_implementation != "PyPy"
DEBUG:req_compile.compile:Processing node cryptography==42.0.8
DEBUG:req_compile.compile:Processing node cffi [UNSOLVED]
INFO:req_compile.repository.pypi:Getting candidate for cffi>=1.12; platform_python_implementation != "PyPy"
INFO:req_compile.repository.pypi:Fetching versions for cffi from https://pypi.org/simple/cffi
DEBUG:urllib3.connectionpool:https://pypi.org:443 "GET /simple/cffi/ HTTP/1.1" 200 156183
DEBUG:req_compile.repository.pypi:No file in wheel-dir
INFO:req_compile.repository.pypi:Downloading https://files.pythonhosted.org/packages/18/6c/0406611f3d5aadf4c5b08f6c095d874aed8dfc2d3a19892707d72536d5dc/cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl#sha256=1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 -> /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl
DEBUG:urllib3.connectionpool:https://files.pythonhosted.org:443 "GET /packages/18/6c/0406611f3d5aadf4c5b08f6c095d874aed8dfc2d3a19892707d72536d5dc/cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl HTTP/1.1" 200 176745
INFO:req_compile.metadata:Extracting metadata for /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl
DEBUG:req_compile.metadata:Extracting from wheel
DEBUG:req_compile.metadata.dist_info:Found dist-info in the zip: cffi-1.16.0.dist-info/METADATA (with regex ^(.+/)?cffi-.+\.dist-info/METADATA$)
DEBUG:req_compile.compile:Acquired candidate cffi==1.16.0 cffi>=1.12; platform_python_implementation != "PyPy" [<default index> https://pypi.org/simple] (download)
DEBUG:req_compile.dists:Adding dist: cffi==1.16.0 cryptography==42.0.8 cffi>=1.12; platform_python_implementation != "PyPy"
DEBUG:req_compile.dists:Adding dist: pycparser cffi==1.16.0 pycparser
DEBUG:req_compile.compile:Processing node cffi==1.16.0
DEBUG:req_compile.compile:Processing node pycparser [UNSOLVED]
INFO:req_compile.repository.pypi:Getting candidate for pycparser
INFO:req_compile.repository.pypi:Fetching versions for pycparser from https://pypi.org/simple/pycparser
DEBUG:urllib3.connectionpool:https://pypi.org:443 "GET /simple/pycparser/ HTTP/1.1" 200 2745
DEBUG:req_compile.repository.pypi:No file in wheel-dir
INFO:req_compile.repository.pypi:Downloading https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl#sha256=c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc -> /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/pycparser-2.22-py3-none-any.whl
DEBUG:urllib3.connectionpool:https://files.pythonhosted.org:443 "GET /packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl HTTP/1.1" 200 117552
INFO:req_compile.metadata:Extracting metadata for /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/pycparser-2.22-py3-none-any.whl
DEBUG:req_compile.metadata:Extracting from wheel
DEBUG:req_compile.metadata.dist_info:Found dist-info in the zip: pycparser-2.22.dist-info/METADATA (with regex ^(.+/)?pycparser-.+\.dist-info/METADATA$)
DEBUG:req_compile.compile:Acquired candidate pycparser==2.22 pycparser [<default index> https://pypi.org/simple] (download)
DEBUG:req_compile.dists:Adding dist: pycparser==2.22 cffi==1.16.0 pycparser
DEBUG:req_compile.compile:Processing node pycparser==2.22
DEBUG:req_compile.compile:Processing node pyspnego [UNSOLVED]
INFO:req_compile.repository.pypi:Getting candidate for pyspnego[kerberos]
INFO:req_compile.repository.pypi:Fetching versions for pyspnego from https://pypi.org/simple/pyspnego
DEBUG:urllib3.connectionpool:https://pypi.org:443 "GET /simple/pyspnego/ HTTP/1.1" 200 37799
DEBUG:req_compile.repository.pypi:No file in wheel-dir
INFO:req_compile.repository.pypi:Downloading https://files.pythonhosted.org/packages/02/91/9ef6d9425e888f3e7e67301ab9ffd4aad027f667384405f9c3fa30027de3/pyspnego-0.11.0-py3-none-any.whl#sha256=cdfe9af7b19749d692e02fd4bd1b4b71d44ecb8dd9b2474abb0f3d90f6154e7e -> /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/pyspnego-0.11.0-py3-none-any.whl
DEBUG:urllib3.connectionpool:https://files.pythonhosted.org:443 "GET /packages/02/91/9ef6d9425e888f3e7e67301ab9ffd4aad027f667384405f9c3fa30027de3/pyspnego-0.11.0-py3-none-any.whl HTTP/1.1" 200 130366
INFO:req_compile.metadata:Extracting metadata for /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/pyspnego-0.11.0-py3-none-any.whl
DEBUG:req_compile.metadata:Extracting from wheel
DEBUG:req_compile.metadata.dist_info:Found dist-info in the zip: pyspnego-0.11.0.dist-info/METADATA (with regex ^(.+/)?pyspnego-.+\.dist-info/METADATA$)
DEBUG:req_compile.compile:Acquired candidate pyspnego==0.11.0 pyspnego[kerberos] [<default index> https://pypi.org/simple] (download)
DEBUG:req_compile.dists:Adding dist: pyspnego==0.11.0 requests-kerberos==0.14.0 pyspnego[kerberos]
DEBUG:req_compile.dists:Adding dist: cryptography pyspnego[kerberos]==0.11.0 cryptography
DEBUG:req_compile.dists:Adding dist: gssapi pyspnego[kerberos]==0.11.0 gssapi>=1.6.0; sys_platform != "win32" and extra == "kerberos"
DEBUG:req_compile.dists:Adding dist: krb5 pyspnego[kerberos]==0.11.0 krb5>=0.3.0; sys_platform != "win32" and extra == "kerberos"
DEBUG:req_compile.compile:Processing node pyspnego[kerberos]==0.11.0
DEBUG:req_compile.compile:Processing node cryptography==42.0.8
INFO:req_compile.compile:Reusing dist cryptography 42.0.8
DEBUG:req_compile.compile:Processing node gssapi [UNSOLVED]
INFO:req_compile.repository.pypi:Getting candidate for gssapi>=1.6.0; sys_platform != "win32" and extra == "kerberos"
INFO:req_compile.repository.pypi:Fetching versions for gssapi from https://pypi.org/simple/gssapi
DEBUG:urllib3.connectionpool:https://pypi.org:443 "GET /simple/gssapi/ HTTP/1.1" 200 19502
DEBUG:req_compile.repository.pypi:No file in wheel-dir
INFO:req_compile.repository.pypi:Downloading https://files.pythonhosted.org/packages/0a/c4/3b62db3b869e6a655f1d95f1ffe8a05777df32ed2b786da0ba963d863d45/gssapi-1.8.3-cp311-cp311-macosx_11_0_arm64.whl#sha256=ca6ceb17fc15eda2a69f2e8c6cf10d11e2edb32832255e5d4c65b21b6db4680a -> /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/gssapi-1.8.3-cp311-cp311-macosx_11_0_arm64.whl
DEBUG:urllib3.connectionpool:https://files.pythonhosted.org:443 "GET /packages/0a/c4/3b62db3b869e6a655f1d95f1ffe8a05777df32ed2b786da0ba963d863d45/gssapi-1.8.3-cp311-cp311-macosx_11_0_arm64.whl HTTP/1.1" 200 687690
INFO:req_compile.metadata:Extracting metadata for /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/gssapi-1.8.3-cp311-cp311-macosx_11_0_arm64.whl
DEBUG:req_compile.metadata:Extracting from wheel
DEBUG:req_compile.metadata.dist_info:Found dist-info in the zip: gssapi-1.8.3.dist-info/METADATA (with regex ^(.+/)?gssapi-.+\.dist-info/METADATA$)
DEBUG:req_compile.compile:Acquired candidate gssapi==1.8.3 gssapi>=1.6.0; sys_platform != "win32" and extra == "kerberos" [<default index> https://pypi.org/simple] (download)
DEBUG:req_compile.dists:Adding dist: gssapi==1.8.3 pyspnego[kerberos]==0.11.0 gssapi>=1.6.0; sys_platform != "win32" and extra == "kerberos"
DEBUG:req_compile.dists:Adding dist: decorator gssapi==1.8.3 decorator
DEBUG:req_compile.compile:Processing node gssapi==1.8.3
DEBUG:req_compile.compile:Processing node decorator [UNSOLVED]
INFO:req_compile.repository.pypi:Getting candidate for decorator
INFO:req_compile.repository.pypi:Fetching versions for decorator from https://pypi.org/simple/decorator
DEBUG:urllib3.connectionpool:https://pypi.org:443 "GET /simple/decorator/ HTTP/1.1" 200 7547
DEBUG:req_compile.repository.pypi:No file in wheel-dir
INFO:req_compile.repository.pypi:Downloading https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl#sha256=b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 -> /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/decorator-5.1.1-py3-none-any.whl
DEBUG:urllib3.connectionpool:https://files.pythonhosted.org:443 "GET /packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl HTTP/1.1" 200 9073
INFO:req_compile.metadata:Extracting metadata for /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/decorator-5.1.1-py3-none-any.whl
DEBUG:req_compile.metadata:Extracting from wheel
DEBUG:req_compile.metadata.dist_info:Found dist-info in the zip: decorator-5.1.1.dist-info/METADATA (with regex ^(.+/)?decorator-.+\.dist-info/METADATA$)
DEBUG:req_compile.compile:Acquired candidate decorator==5.1.1 decorator [<default index> https://pypi.org/simple] (download)
DEBUG:req_compile.dists:Adding dist: decorator==5.1.1 gssapi==1.8.3 decorator
DEBUG:req_compile.compile:Processing node decorator==5.1.1
DEBUG:req_compile.compile:Processing node krb5 [UNSOLVED]
INFO:req_compile.repository.pypi:Getting candidate for krb5>=0.3.0; sys_platform != "win32" and extra == "kerberos"
INFO:req_compile.repository.pypi:Fetching versions for krb5 from https://pypi.org/simple/krb5
DEBUG:urllib3.connectionpool:https://pypi.org:443 "GET /simple/krb5/ HTTP/1.1" 200 8161
DEBUG:req_compile.repository.pypi:No file in wheel-dir
INFO:req_compile.repository.pypi:Downloading https://files.pythonhosted.org/packages/13/9b/1cdca966e543624a44c77e106c6d4bdf0e9a0f46694f8f5ce092742a31c9/krb5-0.5.1-cp311-cp311-macosx_11_0_arm64.whl#sha256=2269fb6c0813cd7f58526a152d746aebb8e48026b92856093865414395c185e9 -> /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/krb5-0.5.1-cp311-cp311-macosx_11_0_arm64.whl
DEBUG:urllib3.connectionpool:https://files.pythonhosted.org:443 "GET /packages/13/9b/1cdca966e543624a44c77e106c6d4bdf0e9a0f46694f8f5ce092742a31c9/krb5-0.5.1-cp311-cp311-macosx_11_0_arm64.whl HTTP/1.1" 200 907518
INFO:req_compile.metadata:Extracting metadata for /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/krb5-0.5.1-cp311-cp311-macosx_11_0_arm64.whl
DEBUG:req_compile.metadata:Extracting from wheel
DEBUG:req_compile.metadata.dist_info:Found dist-info in the zip: krb5-0.5.1.dist-info/METADATA (with regex ^(.+/)?krb5-.+\.dist-info/METADATA$)
DEBUG:req_compile.compile:Acquired candidate krb5==0.5.1 krb5>=0.3.0; sys_platform != "win32" and extra == "kerberos" [<default index> https://pypi.org/simple] (download)
DEBUG:req_compile.dists:Adding dist: krb5==0.5.1 pyspnego[kerberos]==0.11.0 krb5>=0.3.0; sys_platform != "win32" and extra == "kerberos"
DEBUG:req_compile.compile:Processing node krb5==0.5.1
DEBUG:req_compile.compile:Processing node requests [UNSOLVED]
INFO:req_compile.repository.pypi:Getting candidate for requests>=1.1.0
INFO:req_compile.repository.pypi:Fetching versions for requests from https://pypi.org/simple/requests
DEBUG:urllib3.connectionpool:https://pypi.org:443 "GET /simple/requests/ HTTP/1.1" 200 24526
DEBUG:req_compile.repository.pypi:No file in wheel-dir
INFO:req_compile.repository.pypi:Downloading https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl#sha256=70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 -> /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/requests-2.32.3-py3-none-any.whl
DEBUG:urllib3.connectionpool:https://files.pythonhosted.org:443 "GET /packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl HTTP/1.1" 200 64928
INFO:req_compile.metadata:Extracting metadata for /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/requests-2.32.3-py3-none-any.whl
DEBUG:req_compile.metadata:Extracting from wheel
DEBUG:req_compile.metadata.dist_info:Found dist-info in the zip: requests-2.32.3.dist-info/METADATA (with regex ^(.+/)?requests-.+\.dist-info/METADATA$)
DEBUG:req_compile.compile:Acquired candidate requests==2.32.3 requests>=1.1.0 [<default index> https://pypi.org/simple] (download)
DEBUG:req_compile.dists:Adding dist: requests==2.32.3 requests-kerberos==0.14.0 requests>=1.1.0
DEBUG:req_compile.dists:Adding dist: charset-normalizer requests==2.32.3 charset-normalizer<4,>=2
DEBUG:req_compile.dists:Adding dist: idna requests==2.32.3 idna<4,>=2.5
DEBUG:req_compile.dists:Adding dist: urllib3 requests==2.32.3 urllib3<3,>=1.21.1
DEBUG:req_compile.dists:Adding dist: certifi requests==2.32.3 certifi>=2017.4.17
DEBUG:req_compile.compile:Processing node requests==2.32.3
DEBUG:req_compile.compile:Processing node certifi [UNSOLVED]
INFO:req_compile.repository.pypi:Getting candidate for certifi>=2017.4.17
INFO:req_compile.repository.pypi:Fetching versions for certifi from https://pypi.org/simple/certifi
DEBUG:urllib3.connectionpool:https://pypi.org:443 "GET /simple/certifi/ HTTP/1.1" 200 12376
DEBUG:req_compile.repository.pypi:No file in wheel-dir
INFO:req_compile.repository.pypi:Downloading https://files.pythonhosted.org/packages/5b/11/1e78951465b4a225519b8c3ad29769c49e0d8d157a070f681d5b6d64737f/certifi-2024.6.2-py3-none-any.whl#sha256=ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56 -> /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/certifi-2024.6.2-py3-none-any.whl
DEBUG:urllib3.connectionpool:https://files.pythonhosted.org:443 "GET /packages/5b/11/1e78951465b4a225519b8c3ad29769c49e0d8d157a070f681d5b6d64737f/certifi-2024.6.2-py3-none-any.whl HTTP/1.1" 200 164433
INFO:req_compile.metadata:Extracting metadata for /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/certifi-2024.6.2-py3-none-any.whl
DEBUG:req_compile.metadata:Extracting from wheel
DEBUG:req_compile.metadata.dist_info:Found dist-info in the zip: certifi-2024.6.2.dist-info/METADATA (with regex ^(.+/)?certifi-.+\.dist-info/METADATA$)
DEBUG:req_compile.compile:Acquired candidate certifi==2024.6.2 certifi>=2017.4.17 [<default index> https://pypi.org/simple] (download)
DEBUG:req_compile.dists:Adding dist: certifi==2024.6.2 requests==2.32.3 certifi>=2017.4.17
DEBUG:req_compile.compile:Processing node certifi==2024.6.2
DEBUG:req_compile.compile:Processing node charset_normalizer [UNSOLVED]
INFO:req_compile.repository.pypi:Getting candidate for charset-normalizer<4,>=2
INFO:req_compile.repository.pypi:Fetching versions for charset-normalizer from https://pypi.org/simple/charset-normalizer
DEBUG:urllib3.connectionpool:https://pypi.org:443 "GET /simple/charset-normalizer/ HTTP/1.1" 200 85215
DEBUG:req_compile.repository.pypi:No file in wheel-dir
INFO:req_compile.repository.pypi:Downloading https://files.pythonhosted.org/packages/dd/51/68b61b90b24ca35495956b718f35a9756ef7d3dd4b3c1508056fa98d1a1b/charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl#sha256=549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e -> /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl
DEBUG:urllib3.connectionpool:https://files.pythonhosted.org:443 "GET /packages/dd/51/68b61b90b24ca35495956b718f35a9756ef7d3dd4b3c1508056fa98d1a1b/charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl HTTP/1.1" 200 118979
INFO:req_compile.metadata:Extracting metadata for /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl
DEBUG:req_compile.metadata:Extracting from wheel
DEBUG:req_compile.metadata.dist_info:Found dist-info in the zip: charset_normalizer-3.3.2.dist-info/METADATA (with regex ^(.+/)?charset_normalizer-.+\.dist-info/METADATA$)
DEBUG:req_compile.compile:Acquired candidate charset-normalizer==3.3.2 charset-normalizer<4,>=2 [<default index> https://pypi.org/simple] (download)
DEBUG:req_compile.dists:Adding dist: charset-normalizer==3.3.2 requests==2.32.3 charset-normalizer<4,>=2
DEBUG:req_compile.compile:Processing node charset-normalizer==3.3.2
DEBUG:req_compile.compile:Processing node idna [UNSOLVED]
INFO:req_compile.repository.pypi:Getting candidate for idna<4,>=2.5
INFO:req_compile.repository.pypi:Fetching versions for idna from https://pypi.org/simple/idna
DEBUG:urllib3.connectionpool:https://pypi.org:443 "GET /simple/idna/ HTTP/1.1" 200 5672
DEBUG:req_compile.repository.pypi:No file in wheel-dir
INFO:req_compile.repository.pypi:Downloading https://files.pythonhosted.org/packages/e5/3e/741d8c82801c347547f8a2a06aa57dbb1992be9e948df2ea0eda2c8b79e8/idna-3.7-py3-none-any.whl#sha256=82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 -> /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/idna-3.7-py3-none-any.whl
DEBUG:urllib3.connectionpool:https://files.pythonhosted.org:443 "GET /packages/e5/3e/741d8c82801c347547f8a2a06aa57dbb1992be9e948df2ea0eda2c8b79e8/idna-3.7-py3-none-any.whl HTTP/1.1" 200 66836
INFO:req_compile.metadata:Extracting metadata for /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/idna-3.7-py3-none-any.whl
DEBUG:req_compile.metadata:Extracting from wheel
DEBUG:req_compile.metadata.dist_info:Found dist-info in the zip: idna-3.7.dist-info/METADATA (with regex ^(.+/)?idna-.+\.dist-info/METADATA$)
DEBUG:req_compile.compile:Acquired candidate idna==3.7 idna<4,>=2.5 [<default index> https://pypi.org/simple] (download)
DEBUG:req_compile.dists:Adding dist: idna==3.7 requests==2.32.3 idna<4,>=2.5
DEBUG:req_compile.compile:Processing node idna==3.7
DEBUG:req_compile.compile:Processing node urllib3 [UNSOLVED]
INFO:req_compile.repository.pypi:Getting candidate for urllib3<3,>=1.21.1
INFO:req_compile.repository.pypi:Fetching versions for urllib3 from https://pypi.org/simple/urllib3
DEBUG:urllib3.connectionpool:https://pypi.org:443 "GET /simple/urllib3/ HTTP/1.1" 200 19585
DEBUG:req_compile.repository.pypi:No file in wheel-dir
INFO:req_compile.repository.pypi:Downloading https://files.pythonhosted.org/packages/ca/1c/89ffc63a9605b583d5df2be791a27bc1a42b7c32bab68d3c8f2f73a98cd4/urllib3-2.2.2-py3-none-any.whl#sha256=a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 -> /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/urllib3-2.2.2-py3-none-any.whl
DEBUG:urllib3.connectionpool:https://files.pythonhosted.org:443 "GET /packages/ca/1c/89ffc63a9605b583d5df2be791a27bc1a42b7c32bab68d3c8f2f73a98cd4/urllib3-2.2.2-py3-none-any.whl HTTP/1.1" 200 121444
INFO:req_compile.metadata:Extracting metadata for /var/folders/hf/phjl9q7501gb5wt_qr4ltn3m0000gn/T/tmprwfplb9o/urllib3-2.2.2-py3-none-any.whl
DEBUG:req_compile.metadata:Extracting from wheel
DEBUG:req_compile.metadata.dist_info:Found dist-info in the zip: urllib3-2.2.2.dist-info/METADATA (with regex ^(.+/)?urllib3-.+\.dist-info/METADATA$)
DEBUG:req_compile.compile:Acquired candidate urllib3==2.2.2 urllib3<3,>=1.21.1 [<default index> https://pypi.org/simple] (download)
DEBUG:req_compile.dists:Adding dist: urllib3==2.2.2 requests==2.32.3 urllib3<3,>=1.21.1
DEBUG:req_compile.compile:Processing node urllib3==2.2.2
```

</details>

```
req-compile requirements.in --hashes --urls --annotate --verbose --solution requirements.macos.txt 
```

`requirements.macos.txt.incremental`:

<details>

```
# Compiled by Req-Compile (1.0.0rc21) on 2024-06-22 01:31:03.203191 UTC
#
# Inputs:
# requirements.in
#
# Repositories (this annotation produced by --annotate):
# [0] --solution /Users/andrebrisco/Code/req-compile/private/tests/incremental/requirements.macos.txt
# [1] <default index> https://pypi.org/simple

certifi==2024.6.2 \
    --hash=sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56
    # [0]
    # via requests (>=2017.4.17)
    # https://files.pythonhosted.org/packages/5b/11/1e78951465b4a225519b8c3ad29769c49e0d8d157a070f681d5b6d64737f/certifi-2024.6.2-py3-none-any.whl#sha256=ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56
cffi==1.16.0 \
    --hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417
    # [0]
    # via cryptography (>=1.12)
    # https://files.pythonhosted.org/packages/18/6c/0406611f3d5aadf4c5b08f6c095d874aed8dfc2d3a19892707d72536d5dc/cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl#sha256=1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417
charset-normalizer==3.3.2 \
    --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e
    # [0]
    # via requests (<4,>=2)
    # https://files.pythonhosted.org/packages/dd/51/68b61b90b24ca35495956b718f35a9756ef7d3dd4b3c1508056fa98d1a1b/charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl#sha256=549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e
cryptography==42.0.8 \
    --hash=sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28
    # [0]
    # via
    #   pyspnego
    #   requests-kerberos (>=1.3)
    # https://files.pythonhosted.org/packages/60/12/f064af29190cdb1d38fe07f3db6126091639e1dece7ec77c4ff037d49193/cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl#sha256=dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28
idna==3.7 \
    --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0
    # [0]
    # via requests (<4,>=2.5)
    # https://files.pythonhosted.org/packages/e5/3e/741d8c82801c347547f8a2a06aa57dbb1992be9e948df2ea0eda2c8b79e8/idna-3.7-py3-none-any.whl#sha256=82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0
pycparser==2.22 \
    --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
    # [0]
    # via cffi
    # https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl#sha256=c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
pyspnego==0.11.0 \
    --hash=sha256:cdfe9af7b19749d692e02fd4bd1b4b71d44ecb8dd9b2474abb0f3d90f6154e7e
    # [0]
    # via requests-kerberos
    # https://files.pythonhosted.org/packages/02/91/9ef6d9425e888f3e7e67301ab9ffd4aad027f667384405f9c3fa30027de3/pyspnego-0.11.0-py3-none-any.whl#sha256=cdfe9af7b19749d692e02fd4bd1b4b71d44ecb8dd9b2474abb0f3d90f6154e7e
requests==2.32.3 \
    --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6
    # [0]
    # via requests-kerberos (>=1.1.0)
    # https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl#sha256=70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6
requests-kerberos==0.14.0 \
    --hash=sha256:da74ea478ccd8584de88092bdcd17a7c29d494374a340d1d8677189903c9ac6a
    # [0]
    # via requirements.in (==0.14.0)
    # https://files.pythonhosted.org/packages/13/3b/42c51612c9d46de37bdae19f2290848e17ee4fa38a63f37f1d46b7660510/requests_kerberos-0.14.0-py2.py3-none-any.whl#sha256=da74ea478ccd8584de88092bdcd17a7c29d494374a340d1d8677189903c9ac6a
urllib3==2.2.2 \
    --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472
    # [0]
    # via requests (<3,>=1.21.1)
    # https://files.pythonhosted.org/packages/ca/1c/89ffc63a9605b583d5df2be791a27bc1a42b7c32bab68d3c8f2f73a98cd4/urllib3-2.2.2-py3-none-any.whl#sha256=a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472
```

</details>

verbose logs:

<details>

```
DEBUG:req_compile.dists:Adding dist: certifi==2024.6.2 None certifi==2024.6.2
DEBUG:req_compile.dists:Adding dist: requests None requests
DEBUG:req_compile.dists:Adding dist: certifi requests==0+missing certifi>=2017.4.17
DEBUG:req_compile.dists:Adding dist: cffi==1.16.0 None cffi==1.16.0
DEBUG:req_compile.dists:Adding dist: cryptography None cryptography
DEBUG:req_compile.dists:Adding dist: cffi cryptography==0+missing cffi>=1.12
DEBUG:req_compile.dists:Adding dist: charset-normalizer==3.3.2 None charset-normalizer==3.3.2
DEBUG:req_compile.dists:Adding dist: requests None requests
DEBUG:req_compile.dists:Adding dist: charset-normalizer requests==0+missing charset-normalizer<4,>=2
DEBUG:req_compile.dists:Adding dist: cryptography==42.0.8 None cryptography==42.0.8
DEBUG:req_compile.dists:Adding dist: cffi cryptography==42.0.8 cffi>=1.12
DEBUG:req_compile.dists:Adding dist: pyspnego None pyspnego
DEBUG:req_compile.dists:Adding dist: cryptography pyspnego==0+missing cryptography
DEBUG:req_compile.dists:Adding dist: requests-kerberos None requests-kerberos
DEBUG:req_compile.dists:Adding dist: cryptography requests-kerberos==0+missing cryptography>=1.3
DEBUG:req_compile.dists:Adding dist: decorator==5.1.1 None decorator==5.1.1
DEBUG:req_compile.dists:Adding dist: gssapi None gssapi
DEBUG:req_compile.dists:Adding dist: decorator gssapi==0+missing decorator
DEBUG:req_compile.dists:Adding dist: gssapi==1.8.3 None gssapi==1.8.3
DEBUG:req_compile.dists:Adding dist: decorator gssapi==1.8.3 decorator
DEBUG:req_compile.dists:Adding dist: pyspnego None pyspnego[kerberos]
DEBUG:req_compile.dists:Adding dist: cryptography pyspnego==0+missing cryptography
DEBUG:req_compile.dists:Adding dist: gssapi pyspnego==0+missing gssapi>=1.6.0; extra == "kerberos"
DEBUG:req_compile.dists:Adding dist: idna==3.7 None idna==3.7
DEBUG:req_compile.dists:Adding dist: requests None requests
DEBUG:req_compile.dists:Adding dist: idna requests==0+missing idna<4,>=2.5
DEBUG:req_compile.dists:Adding dist: krb5==0.5.1 None krb5==0.5.1
DEBUG:req_compile.dists:Adding dist: pyspnego None pyspnego[kerberos]
DEBUG:req_compile.dists:Adding dist: cryptography pyspnego==0+missing cryptography
DEBUG:req_compile.dists:Adding dist: krb5 pyspnego==0+missing krb5>=0.3.0; extra == "kerberos"
DEBUG:req_compile.dists:Adding dist: pycparser==2.22 None pycparser==2.22
DEBUG:req_compile.dists:Adding dist: cffi None cffi
DEBUG:req_compile.dists:Adding dist: pycparser cffi==1.16.0 pycparser
DEBUG:req_compile.dists:Adding dist: pyspnego==0.11.0 None pyspnego==0.11.0
DEBUG:req_compile.dists:Adding dist: cryptography pyspnego==0.11.0 cryptography
DEBUG:req_compile.dists:Adding dist: requests-kerberos None requests-kerberos
DEBUG:req_compile.dists:Adding dist: pyspnego requests-kerberos==0+missing pyspnego
DEBUG:req_compile.dists:Adding dist: requests==2.32.3 None requests==2.32.3
DEBUG:req_compile.dists:Adding dist: certifi requests==2.32.3 certifi>=2017.4.17
DEBUG:req_compile.dists:Adding dist: charset-normalizer requests==2.32.3 charset-normalizer<4,>=2
DEBUG:req_compile.dists:Adding dist: idna requests==2.32.3 idna<4,>=2.5
DEBUG:req_compile.dists:Adding dist: requests-kerberos None requests-kerberos
DEBUG:req_compile.dists:Adding dist: requests requests-kerberos==0+missing requests>=1.1.0
DEBUG:req_compile.dists:Adding dist: requests-kerberos==0.14.0 None requests-kerberos==0.14.0
DEBUG:req_compile.dists:Adding dist: cryptography requests-kerberos==0.14.0 cryptography>=1.3
DEBUG:req_compile.dists:Adding dist: pyspnego requests-kerberos==0.14.0 pyspnego
DEBUG:req_compile.dists:Adding dist: requests requests-kerberos==0.14.0 requests>=1.1.0
DEBUG:req_compile.dists:Adding dist: requests-kerberos None requests-kerberos==0.14.0
DEBUG:req_compile.dists:Adding dist: urllib3==2.2.2 None urllib3==2.2.2
DEBUG:req_compile.dists:Adding dist: requests None requests
DEBUG:req_compile.dists:Adding dist: urllib3 requests==2.32.3 urllib3<3,>=1.21.1
DEBUG:req_compile.dists:Adding dist: requirements.in None None
DEBUG:req_compile.dists:Adding dist: requests-kerberos requirements.in requests-kerberos==0.14.0
DEBUG:req_compile.compile:Processing node requirements.in
DEBUG:req_compile.compile:Processing node requests_kerberos [UNSOLVED]
INFO:req_compile.repository.solution:Getting candidate for requests-kerberos==0.14.0
DEBUG:req_compile.compile:Acquired candidate requests-kerberos==0.14.0 requests-kerberos==0.14.0 [--solution /Users/andrebrisco/Code/req-compile/private/tests/incremental/requirements.macos.txt] (cached)
DEBUG:req_compile.dists:Adding dist: requests-kerberos==0.14.0 requirements.in requests-kerberos==0.14.0
DEBUG:req_compile.dists:Adding dist: cryptography requests-kerberos==0.14.0 cryptography>=1.3
DEBUG:req_compile.dists:Adding dist: pyspnego requests-kerberos==0.14.0 pyspnego
DEBUG:req_compile.dists:Adding dist: requests requests-kerberos==0.14.0 requests>=1.1.0
DEBUG:req_compile.compile:Processing node requests-kerberos==0.14.0
DEBUG:req_compile.compile:Processing node cryptography [UNSOLVED]
INFO:req_compile.repository.solution:Getting candidate for cryptography>=1.3
DEBUG:req_compile.compile:Acquired candidate cryptography==42.0.8 cryptography>=1.3 [--solution /Users/andrebrisco/Code/req-compile/private/tests/incremental/requirements.macos.txt] (cached)
DEBUG:req_compile.dists:Adding dist: cryptography==42.0.8 requests-kerberos==0.14.0 cryptography>=1.3
DEBUG:req_compile.dists:Adding dist: cffi cryptography==42.0.8 cffi>=1.12
DEBUG:req_compile.compile:Processing node cryptography==42.0.8
DEBUG:req_compile.compile:Processing node cffi [UNSOLVED]
INFO:req_compile.repository.solution:Getting candidate for cffi>=1.12
DEBUG:req_compile.compile:Acquired candidate cffi==1.16.0 cffi>=1.12 [--solution /Users/andrebrisco/Code/req-compile/private/tests/incremental/requirements.macos.txt] (cached)
DEBUG:req_compile.dists:Adding dist: cffi==1.16.0 cryptography==42.0.8 cffi>=1.12
DEBUG:req_compile.dists:Adding dist: pycparser cffi==1.16.0 pycparser
DEBUG:req_compile.compile:Processing node cffi==1.16.0
DEBUG:req_compile.compile:Processing node pycparser [UNSOLVED]
INFO:req_compile.repository.solution:Getting candidate for pycparser
DEBUG:req_compile.compile:Acquired candidate pycparser==2.22 pycparser [--solution /Users/andrebrisco/Code/req-compile/private/tests/incremental/requirements.macos.txt] (cached)
DEBUG:req_compile.dists:Adding dist: pycparser==2.22 cffi==1.16.0 pycparser
DEBUG:req_compile.compile:Processing node pycparser==2.22
DEBUG:req_compile.compile:Processing node pyspnego [UNSOLVED]
INFO:req_compile.repository.solution:Getting candidate for pyspnego
DEBUG:req_compile.compile:Acquired candidate pyspnego==0.11.0 pyspnego [--solution /Users/andrebrisco/Code/req-compile/private/tests/incremental/requirements.macos.txt] (cached)
DEBUG:req_compile.dists:Adding dist: pyspnego==0.11.0 requests-kerberos==0.14.0 pyspnego
DEBUG:req_compile.dists:Adding dist: cryptography pyspnego==0.11.0 cryptography
DEBUG:req_compile.compile:Processing node pyspnego==0.11.0
DEBUG:req_compile.compile:Processing node cryptography==42.0.8
INFO:req_compile.compile:Reusing dist cryptography 42.0.8
DEBUG:req_compile.compile:Processing node requests [UNSOLVED]
INFO:req_compile.repository.solution:Getting candidate for requests>=1.1.0
DEBUG:req_compile.compile:Acquired candidate requests==2.32.3 requests>=1.1.0 [--solution /Users/andrebrisco/Code/req-compile/private/tests/incremental/requirements.macos.txt] (cached)
DEBUG:req_compile.dists:Adding dist: requests==2.32.3 requests-kerberos==0.14.0 requests>=1.1.0
DEBUG:req_compile.dists:Adding dist: certifi requests==2.32.3 certifi>=2017.4.17
DEBUG:req_compile.dists:Adding dist: charset-normalizer requests==2.32.3 charset-normalizer<4,>=2
DEBUG:req_compile.dists:Adding dist: idna requests==2.32.3 idna<4,>=2.5
DEBUG:req_compile.dists:Adding dist: urllib3 requests==2.32.3 urllib3<3,>=1.21.1
DEBUG:req_compile.compile:Processing node requests==2.32.3
DEBUG:req_compile.compile:Processing node certifi [UNSOLVED]
INFO:req_compile.repository.solution:Getting candidate for certifi>=2017.4.17
DEBUG:req_compile.compile:Acquired candidate certifi==2024.6.2 certifi>=2017.4.17 [--solution /Users/andrebrisco/Code/req-compile/private/tests/incremental/requirements.macos.txt] (cached)
DEBUG:req_compile.dists:Adding dist: certifi==2024.6.2 requests==2.32.3 certifi>=2017.4.17
DEBUG:req_compile.compile:Processing node certifi==2024.6.2
DEBUG:req_compile.compile:Processing node charset_normalizer [UNSOLVED]
INFO:req_compile.repository.solution:Getting candidate for charset-normalizer<4,>=2
DEBUG:req_compile.compile:Acquired candidate charset-normalizer==3.3.2 charset-normalizer<4,>=2 [--solution /Users/andrebrisco/Code/req-compile/private/tests/incremental/requirements.macos.txt] (cached)
DEBUG:req_compile.dists:Adding dist: charset-normalizer==3.3.2 requests==2.32.3 charset-normalizer<4,>=2
DEBUG:req_compile.compile:Processing node charset-normalizer==3.3.2
DEBUG:req_compile.compile:Processing node idna [UNSOLVED]
INFO:req_compile.repository.solution:Getting candidate for idna<4,>=2.5
DEBUG:req_compile.compile:Acquired candidate idna==3.7 idna<4,>=2.5 [--solution /Users/andrebrisco/Code/req-compile/private/tests/incremental/requirements.macos.txt] (cached)
DEBUG:req_compile.dists:Adding dist: idna==3.7 requests==2.32.3 idna<4,>=2.5
DEBUG:req_compile.compile:Processing node idna==3.7
DEBUG:req_compile.compile:Processing node urllib3 [UNSOLVED]
INFO:req_compile.repository.solution:Getting candidate for urllib3<3,>=1.21.1
DEBUG:req_compile.compile:Acquired candidate urllib3==2.2.2 urllib3<3,>=1.21.1 [--solution /Users/andrebrisco/Code/req-compile/private/tests/incremental/requirements.macos.txt] (cached)
DEBUG:req_compile.dists:Adding dist: urllib3==2.2.2 requests==2.32.3 urllib3<3,>=1.21.1
DEBUG:req_compile.compile:Processing node urllib3==2.2.2
```

</details>

The two compilation outputs have the following diff:
```diff
--- requirements.macos.txt.clean	2024-06-21 18:34:27
+++ requirements.macos.txt.incremental	2024-06-21 18:34:26
@@ -1,11 +1,10 @@
-# Compiled by Req-Compile (1.0.0rc21) on 2024-06-22 01:31:03.203191 UTC
+# Compiled by Req-Compile (1.0.0rc21) on 2024-06-22 01:28:42.321036 UTC
 #
 # Inputs:
 # requirements.in
 #
 # Repositories (this annotation produced by --annotate):
-# [0] --solution /Users/andrebrisco/Code/req-compile/private/tests/incremental/requirements.macos.txt
-# [1] <default index> https://pypi.org/simple
+# [0] <default index> https://pypi.org/simple

 certifi==2024.6.2 \
     --hash=sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56
@@ -29,11 +28,26 @@
     #   pyspnego
     #   requests-kerberos (>=1.3)
     # https://files.pythonhosted.org/packages/60/12/f064af29190cdb1d38fe07f3db6126091639e1dece7ec77c4ff037d49193/cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl#sha256=dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28
+decorator==5.1.1 \
+    --hash=sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186
+    # [0]
+    # via gssapi
+    # https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl#sha256=b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186
+gssapi==1.8.3 \
+    --hash=sha256:ca6ceb17fc15eda2a69f2e8c6cf10d11e2edb32832255e5d4c65b21b6db4680a
+    # [0]
+    # via pyspnego[kerberos] (>=1.6.0)
+    # https://files.pythonhosted.org/packages/0a/c4/3b62db3b869e6a655f1d95f1ffe8a05777df32ed2b786da0ba963d863d45/gssapi-1.8.3-cp311-cp311-macosx_11_0_arm64.whl#sha256=ca6ceb17fc15eda2a69f2e8c6cf10d11e2edb32832255e5d4c65b21b6db4680a
 idna==3.7 \
     --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0
     # [0]
     # via requests (<4,>=2.5)
     # https://files.pythonhosted.org/packages/e5/3e/741d8c82801c347547f8a2a06aa57dbb1992be9e948df2ea0eda2c8b79e8/idna-3.7-py3-none-any.whl#sha256=82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0
+krb5==0.5.1 \
+    --hash=sha256:2269fb6c0813cd7f58526a152d746aebb8e48026b92856093865414395c185e9
+    # [0]
+    # via pyspnego[kerberos] (>=0.3.0)
+    # https://files.pythonhosted.org/packages/13/9b/1cdca966e543624a44c77e106c6d4bdf0e9a0f46694f8f5ce092742a31c9/krb5-0.5.1-cp311-cp311-macosx_11_0_arm64.whl#sha256=2269fb6c0813cd7f58526a152d746aebb8e48026b92856093865414395c185e9
 pycparser==2.22 \
     --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
     # [0]
```



Discussion / hints:

Fix patch:
diff --git a/MODULE.bazel b/MODULE.bazel
index c690a9a..cdd6154 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -2,5 +2,5 @@
 
 module(
     name = "rules_req_compile",
-    version = "1.0.0rc21",
+    version = "1.0.0rc22",
 )
diff --git a/req_compile/cmdline.py b/req_compile/cmdline.py
index 5b71840..4c72aa4 100644
--- a/req_compile/cmdline.py
+++ b/req_compile/cmdline.py
@@ -346,12 +346,12 @@ def __init__(self, node: DependencyNode, multiline):
 
     def __str__(self):
         write_to = StringIO()
-        constraints = list(req_compile.dists.build_constraints(self.node))
+        constraints = req_compile.dists.build_explanation(self.node)
 
         if len(constraints) == 1:
             if self.multiline:
                 write_to.write("via ")
-            write_to.write(f"{constraints[0]}")
+            write_to.write(f"{next(iter(constraints))}")
         else:
             if self.multiline:
                 write_to.write("via\n")
@@ -763,14 +763,16 @@ def compile_main(raw_args: Optional[Sequence[str]] = None) -> None:
         "from stdin.",
     )
     group.add_argument(
-        "-c,--constraints",
+        "-c",
+        "--constraints",
         action="append",
         dest="constraints",
         metavar="constraints_file",
         help="Constraints file or project directory to use as constraints.",
     )
     group.add_argument(
-        "-e,--extra",
+        "-e",
+        "--extra",
         action="append",
         dest="extras",
         default=[],
@@ -778,7 +780,8 @@ def compile_main(raw_args: Optional[Sequence[str]] = None) -> None:
         help="Extras to apply automatically to source packages.",
     )
     group.add_argument(
-        "-P,--upgrade-package",
+        "-P",
+        "--upgrade-package",
         action="append",
         dest="upgrade_packages",
         metavar="package_name",
@@ -796,6 +799,12 @@ def compile_main(raw_args: Optional[Sequence[str]] = None) -> None:
         action="store_true",
         help="Remove distributions not satisfied via --source from the output.",
     )
+    group.add_argument(
+        "--remove-constraints",
+        default=False,
+        action="store_true",
+        help="Remove constraints pins from the output.",
+    )
     group.add_argument(
         "-p",
         "--pre",
@@ -979,6 +988,7 @@ def compile_main(raw_args: Optional[Sequence[str]] = None) -> None:
             repo,
             extras=args.extras,
             constraint_reqs=constraint_reqs,
+            remove_constraints=args.remove_constraints,
             only_binary=args.only_binary,
         )
     except RepositoryInitializationError as ex:
diff --git a/req_compile/compile.py b/req_compile/compile.py
index 95bfa50..0ea1f62 100644
--- a/req_compile/compile.py
+++ b/req_compile/compile.py
@@ -267,6 +267,7 @@ def perform_compile(
     input_reqs: Iterable[RequirementContainer],
     repo: Repository,
     constraint_reqs: Optional[Iterable[RequirementContainer]] = None,
+    remove_constraints: bool = False,
     extras: Optional[Iterable[str]] = None,
     allow_circular_dependencies: bool = True,
     only_binary: Optional[Set[NormName]] = None,
@@ -282,6 +283,9 @@ def perform_compile(
         repo: Repository to use as a source of Python packages.
         extras: Extras to apply automatically to source projects
         constraint_reqs: Constraints to use when compiling
+        remove_constraints: Whether to remove the constraints from the solution. By default,
+            constraints are added, so you can see why a requirement was pinned to a particular
+            version.
         allow_circular_dependencies: Whether to allow circular dependencies
         only_binary: Set of projects that should only consider binary distributions.
         max_downgrade: The maximum number of version downgrades that will be allowed for conflicts.
@@ -333,13 +337,15 @@ def perform_compile(
                 node, None, repo, results, options, max_downgrade=max_downgrade
             )
     except (NoCandidateException, MetadataError) as ex:
-        _add_constraints(all_pinned, constraint_reqs, results)
+        if not remove_constraints:
+            _add_constraints(all_pinned, constraint_reqs, results)
         ex.results = results
         raise
 
-    # Add the constraints in, so it will show up as a contributor in the results.
-    # The same is done in the exception block above
-    _add_constraints(all_pinned, constraint_reqs, results)
+    if not remove_constraints:
+        # Add the constraints in, so it will show up as a contributor in the results.
+        # The same is done in the exception block above
+        _add_constraints(all_pinned, constraint_reqs, results)
 
     return results, roots
 
diff --git a/req_compile/dists.py b/req_compile/dists.py
index af84b54..de25fb3 100644
--- a/req_compile/dists.py
+++ b/req_compile/dists.py
@@ -4,21 +4,8 @@
 import itertools
 import logging
 import sys
-from typing import (
-    Any,
-    Callable,
-    Dict,
-    Iterable,
-    Iterator,
-    List,
-    Optional,
-    Set,
-    Tuple,
-    Union,
-)
+from typing import Any, Dict, Iterable, Iterator, List, Optional, Set, Union
 
-import packaging.requirements
-import packaging.version
 import pkg_resources
 
 from req_compile.containers import RequirementContainer
@@ -68,6 +55,7 @@ def __lt__(self, other: Any) -> bool:
 
     @property
     def extras(self) -> Set[str]:
+        """Extras for this node that its reverse dependencies have requested."""
         extras = set()
         for rdep in self.reverse_deps:
             assert (
@@ -112,7 +100,12 @@ def build_constraints(self) -> pkg_resources.Requirement:
         return result
 
 
-def build_constraints(root_node: DependencyNode) -> Iterable[str]:
+def build_explanation(root_node: DependencyNode) -> collections.abc.Collection[str]:
+    """Build an explanation for why a node was included in the solution.
+
+    The explanation provides the version constraints supplied by the reverse
+    dependencies for this node.
+    """
     constraints: List[str] = []
     for node in root_node.reverse_deps:
         assert (
@@ -123,15 +116,16 @@ def build_constraints(root_node: DependencyNode) -> Iterable[str]:
             all_reqs |= set(node.metadata.requires(extra=extra))
         for req in all_reqs:
             if normalize_project_name(req.project_name) == root_node.key:
-                _process_constraint_req(req, node, constraints)
+                constraints.append(_process_constraint_req(req, node))
     return constraints
 
 
 def _process_constraint_req(
-    req: pkg_resources.Requirement, node: DependencyNode, constraints: List[str]
-) -> None:
+    req: pkg_resources.Requirement, node: DependencyNode
+) -> str:
     assert node.metadata is not None, "Node {} must be solved".format(node)
-    extra = None
+    extras: Set[str] = set()
+    # Determine which extras, if any, were the reason this req was included.
     if req.marker:
         for marker in req.marker._markers:  # pylint: disable=protected-access
             if (
@@ -139,10 +133,24 @@ def _process_constraint_req(
                 and marker[0].value == "extra"
                 and marker[1].value == "=="
             ):
-                extra = marker[2].value
-    source = node.metadata.name + (("[" + extra + "]") if extra else "")
-    specifics = " (" + str(req.specifier) + ")" if req.specifier else ""  # type: ignore[attr-defined]
-    constraints.extend([source + specifics])
+                extras.add(marker[2].value.strip().lower())
+    source = node.metadata.name + (
+        ("[" + ",".join(sorted(extras)) + "]") if extras else ""
+    )
+
+    specifics = ""
+    if req.specifier:  # type: ignore[attr-defined]
+        specifics = str(req.specifier)  # type: ignore[attr-defined]
+
+    # Determine which extras this req was itself requesting.
+    if req.extras:
+        specifics += (
+            f" [{','.join(sorted(extra.strip().lower() for extra in req.extras))}]"
+        )
+
+    if specifics:
+        specifics = f" ({specifics.strip()})"
+    return source + specifics
 
 
 class DistributionCollection:
@@ -273,15 +281,6 @@ def remove_dists(
             node.metadata = None
             node.complete = False
 
-    def build(
-        self, roots: Iterable[DependencyNode]
-    ) -> Iterable[pkg_resources.Requirement]:
-        results = self.generate_lines(roots)
-        return [
-            parse_requirement("==".join([result[0][0], str(result[0][1])]))
-            for result in results
-        ]
-
     def visit_nodes(
         self,
         roots: Iterable[DependencyNode],
@@ -320,40 +319,6 @@ def visit_nodes(
             )
         return _visited
 
-    def generate_lines(
-        self,
-        roots: Iterable[DependencyNode],
-        req_filter: Optional[Callable[[DependencyNode], bool]] = None,
-        strip_extras: bool = False,
-    ) -> Iterable[
-        Tuple[Tuple[str, Optional[packaging.version.Version], Optional[str]], str]
-    ]:
-        """
-        Generate the lines of a results file from this collection
-        Args:
-            roots (iterable[DependencyNode]): List of roots to generate lines from
-            req_filter (Callable): Filter to apply to each element of the collection.
-                Return True to keep a node, False to exclude it
-        Returns:
-            (list[str]) List of rendered node entries in the form of
-                reqname==version   # reasons
-        """
-        req_filter = req_filter or (lambda _: True)
-        results: List[
-            Tuple[Tuple[str, Optional[packaging.version.Version], Optional[str]], str]
-        ] = []
-        for node in self.visit_nodes(roots):
-            if node.metadata is None:
-                continue
-            if not node.metadata.meta and req_filter(node):
-                constraints = build_constraints(node)
-                name, version = node.metadata.to_definition(node.extras)
-                if strip_extras:
-                    name = name.split("[", 1)[0]
-                constraint_text = ", ".join(sorted(constraints))
-                results.append(((name, version, node.metadata.hash), constraint_text))
-        return results
-
     def __contains__(self, project_name: str) -> bool:
         req_name = project_name.split("[")[0]
         return normalize_project_name(req_name) in self.nodes
diff --git a/req_compile/repos/solution.py b/req_compile/repos/solution.py
index 1db6a57..b5f2304 100644
--- a/req_compile/repos/solution.py
+++ b/req_compile/repos/solution.py
@@ -249,10 +249,12 @@ def _add_sources(
         url: Optional[str] = None,
         dist_hash: Optional[str] = None,
     ) -> None:
-        pkg_names = map(lambda x: x.split(" ")[0], sources)
+        pkg_names = map(lambda x: x.split(" ", 1)[0], sources)
         constraints = map(
             lambda x: (
-                x.split(" ")[1].replace("(", "").replace(")", "") if "(" in x else None
+                x.split(" ", 1)[1].replace("(", "").replace(")", "")
+                if "(" in x
+                else None
             ),
             sources,
         )
@@ -330,10 +332,24 @@ def _create_metadata_req(
         extra = next(iter(req_compile.utils.parse_requirement(name).extras))
         marker = ' ; extra == "{}"'.format(extra)
 
+    # req will only have extras if the solution file had them in the left-hand
+    # side of == expression, e.g. req[extra]==1.0.  Since pip doesn't support having
+    # extras on the left-hand side for constraints files, we don't emit this
+    # any longer.
+    extras = req.extras
+    if constraints and ("[" in constraints and "]" in constraints):
+        # Parse out the extras that brought in this requirement. It will look like
+        # (>1.0 [extra1,extra2]). Usually it would just be one unless the distribution
+        # includes a requirement under multiple extras.
+        constraints, extra_string = constraints.split("[", 1)
+        constraints = constraints.strip()
+        extra_string = extra_string.replace("]", "")
+        extras = {extra.strip() for extra in extra_string.split(",")}
+
     return req_compile.utils.parse_requirement(
         "{}{}{}{}".format(
             metadata.name,
-            ("[" + ",".join(req.extras) + "]") if req.extras else "",
+            ("[" + ",".join(sorted(extras)) + "]") if extras else "",
             constraints if constraints else "",
             marker,
         )
diff --git a/version.bzl b/version.bzl
index 4aa027a..54227b1 100644
--- a/version.bzl
+++ b/version.bzl
@@ -1,3 +1,3 @@
 """req-compile version"""
 
-VERSION = "1.0.0rc21"
+VERSION = "1.0.0rc22"


Test patch:
diff --git a/tests/repos/requests_kerberos_solution.txt b/tests/repos/requests_kerberos_solution.txt
new file mode 100644
index 0000000..f8f9fed
--- /dev/null
+++ b/tests/repos/requests_kerberos_solution.txt
@@ -0,0 +1,13 @@
+certifi==2024.6.2          # requests (>=2017.4.17)
+cffi==1.15.1               # cryptography (>=1.12)
+charset-normalizer==3.3.2  # requests (<4,>=2)
+cryptography==42.0.8       # pyspnego, requests-kerberos (>=1.3)
+decorator==5.1.1           # gssapi
+gssapi==1.8.2              # pyspnego[kerberos] (>=1.6.0)
+idna==3.7                  # requests (<4,>=2.5)
+krb5==0.5.1                # pyspnego[kerberos] (>=0.3.0)
+pycparser==2.21            # cffi
+pyspnego==0.9.2            # requests-kerberos (>=0.9.2 [kerberos])
+requests==2.31.0           # requests-kerberos (>=1.1.0)
+requests-kerberos==0.14.0  # -
+urllib3==2.0.7             # requests (<3,>=1.21.1)
diff --git a/tests/repos/test_solution.py b/tests/repos/test_solution.py
index e3b2594..ab3ae63 100644
--- a/tests/repos/test_solution.py
+++ b/tests/repos/test_solution.py
@@ -177,7 +177,6 @@ def test_round_trip(
 
 
 def test_writing_repo_sources(mock_metadata, mock_pypi, tmp_path):
-
     mock_pypi.load_scenario("normal")
 
     results, nodes = req_compile.compile.perform_compile(
@@ -230,6 +229,17 @@ def test_load_additive_constraints():
     assert constraints == pkg_resources.Requirement.parse("idna<2.9,>=2.5")
 
 
+def test_load_extras() -> None:
+    """Test that if the correct extras are associated with the correct requirements."""
+    solution_repo = SolutionRepository(
+        os.path.join(os.path.dirname(__file__), "requests_kerberos_solution.txt")
+    )
+    assert solution_repo.solution["pyspnego"].extras == {"kerberos"}
+    assert [req for req in solution_repo.solution["requests-kerberos"].metadata.requires(
+        None
+    ) if req.project_name=="pyspnego"][0] == parse_requirement("pyspnego[kerberos]>=0.9.2")
+
+
 def test_load_extra_first():
     """Test that solutions that refer to a requirement with an extra before it is defined correctly
     add the requirement with the extra"""
diff --git a/tests/test_compile.py b/tests/test_compile.py
index 671de1c..2dd3253 100644
--- a/tests/test_compile.py
+++ b/tests/test_compile.py
@@ -1,6 +1,6 @@
 # pylint: disable=redefined-outer-name
 import os
-from typing import Iterable, Optional, Tuple
+from typing import Iterable, Optional, Set, Tuple
 from unittest import mock
 
 import pkg_resources
@@ -14,6 +14,7 @@
 import req_compile.utils
 from req_compile.compile import AllOnlyBinarySet
 from req_compile.containers import DistInfo, RequirementContainer
+from req_compile.dists import DependencyNode, DistributionCollection
 from req_compile.repos.multi import MultiRepository
 from req_compile.repos.repository import Candidate, Repository, filename_to_candidate
 from req_compile.repos.source import SourceRepository
@@ -29,10 +30,11 @@ def test_mock_pypi(mock_pypi):
     assert metadata.version == req_compile.utils.parse_version("1.0.0")
 
 
-def _real_outputs(results):
-    outputs = results[0].build(results[1])
-    outputs = sorted(outputs, key=lambda x: x.name)
-    return set(str(req) for req in outputs)
+def _real_outputs(results: Tuple[DistributionCollection, Set[DependencyNode]]):
+    return set(
+        "{}=={}".format(*node.metadata.to_definition(node.extras))
+        for node in results[0].visit_nodes(results[1])
+    )
 
 
 @fixture
diff --git a/tests/test_dists.py b/tests/test_dists.py
index 0d55a28..34b6b62 100644
--- a/tests/test_dists.py
+++ b/tests/test_dists.py
@@ -2,7 +2,7 @@
 from pkg_resources import Requirement
 
 from req_compile.containers import DistInfo
-from req_compile.dists import DistributionCollection
+from req_compile.dists import DistributionCollection, build_explanation
 
 
 def test_unconstrained():
@@ -153,11 +153,14 @@ def test_repo_with_extra():
     )
     dists.add_dist(metadata_c, root_a, pkg_resources.Requirement.parse("a"))
 
-    lines = dists.generate_lines({root})
-    assert sorted(lines) == [
-        (("a[test]", "1.0.0", None), "root"),
-        (("b", "2.0.0", None), "a[test]"),
-        (("c", "2.0.0", None), "a"),
+    results = [
+        ("==".join(node.metadata.to_definition(node.extras)), build_explanation(node))
+        for node in dists.visit_nodes({root})
+    ]
+    assert sorted(results) == [
+        ("a[test]==1.0.0", ["root ([test])"]),
+        ("b==2.0.0", ["a[test]"]),
+        ("c==2.0.0", ["a"]),
     ]
 
 
diff --git a/tests/test_integration.py b/tests/test_integration.py
index a4097e5..c9a7782 100644
--- a/tests/test_integration.py
+++ b/tests/test_integration.py
@@ -3,6 +3,8 @@
 import subprocess
 import sys
 
+from req_compile.config import read_pip_default_index
+
 ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))
 
 
@@ -45,7 +47,7 @@ def test_compile_req_compile(tmp_path):
             "-m",
             "req_compile",
             "-i",
-            "https://pypi.org/simple",
+            read_pip_default_index() or "https://pypi.org/simple",
             ".",
             "--wheel-dir",
             str(tmp_path),