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

Add type hints to setuptools #2345

Open
GergelyKalmar opened this issue Aug 27, 2020 · 9 comments
Open

Add type hints to setuptools #2345

GergelyKalmar opened this issue Aug 27, 2020 · 9 comments

Comments

@GergelyKalmar
Copy link

It seems that setuptools doesn't have type hints at the moment:

4: error: Skipping analyzing 'setuptools': found module but no type hints or library stubs
4: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports

I think that adding type hints at least to the most common entrypoints (e.g. setup) would be great to have, considering that setuptools is quite an important part of the official Python ecosystem.

@jaraco
Copy link
Member

jaraco commented Aug 30, 2020

Sounds good to me. Would you be interested in contributing such hints? Maybe start at something modest, like setup() as you say.

@McSinyx
Copy link
Contributor

McSinyx commented Aug 31, 2020

I'm also interested in giving a hand, given this would take quite some work.

@GergelyKalmar
Copy link
Author

Perhaps I could write it up, but it might take some more time then. As you're building on distutils I guess I would need to dig a bit to make sure my implementation makes sense, even if just for setup(). Although the distutils interface seems to be documented okay – I'm not sure what traps to look out for. On the bright side there's at least no need for Python 2-style type hints given that you're not supporting that anymore.

If someone else wants to immerse themselves into this, I wouldn't mind. I'm still a bit behind type hinting my own codebase first anyways.

@GergelyKalmar
Copy link
Author

It's not a very friendly interface to type hint though with all the **attrs catch-alls (https://github.com/python/cpython/blob/master/Lib/distutils/core.py#L57).

@antonagestam
Copy link

It's not a very friendly interface to type hint though with all the **attrs catch-alls (https://github.com/python/cpython/blob/master/Lib/distutils/core.py#L57).

Perhaps it's a good idea to use a stub file and annotate the setup() function as if it had all the documented arguments?

@GergelyKalmar
Copy link
Author

That would have been my idea too. I'm pretty busy at the moment though and so I'm not sure I'd get to it anytime soon!

@jaraco
Copy link
Member

jaraco commented May 23, 2021

Late versions of the setuptools test suite will run mypy checks on the code, but there are many failed checks. To run the checks, use tox -- --mypy. Here's a sample run:

python develop-inst-noop: /Users/jaraco/code/public/pypa/setuptools
python installed: alabaster==0.7.12,apipkg==1.5,appdirs==1.4.4,attrs==21.2.0,Babel==2.9.1,black==21.5b1,bootstrap==1.0,certifi==2020.12.5,chardet==4.0.0,click==8.0.1,contextlib2==0.6.0.post1,coverage==5.5,distlib==0.3.1,docutils==0.17.1,execnet==1.8.0,filelock==3.0.12,flake8==3.9.2,flake8-2020==1.6.0,idna==2.10,imagesize==1.2.0,importlib-metadata==4.0.1,iniconfig==1.1.1,jaraco.context==4.0.0,jaraco.envs==2.1.1,jaraco.functools==3.3.0,jaraco.path==3.3.1,Jinja2==2.11.3,MarkupSafe==1.1.1,mccabe==0.6.1,mock==4.0.3,more-itertools==8.7.0,mypy==0.812,mypy-extensions==0.4.3,packaging==20.9,path==15.1.2,path.py==12.5.0,pathspec==0.8.1,Paver==1.3.4,pep517==0.10.0,pluggy==0.13.1,py==1.10.0,pycodestyle==2.7.0,pyflakes==2.3.1,Pygments==2.9.0,pyobjc==7.2,pyobjc-core==7.2,pyobjc-framework-Accessibility==7.2,pyobjc-framework-Accounts==7.2,pyobjc-framework-AddressBook==7.2,pyobjc-framework-AdServices==7.2,pyobjc-framework-AdSupport==7.2,pyobjc-framework-AppleScriptKit==7.2,pyobjc-framework-AppleScriptObjC==7.2,pyobjc-framework-ApplicationServices==7.2,pyobjc-framework-AppTrackingTransparency==7.2,pyobjc-framework-AuthenticationServices==7.2,pyobjc-framework-AutomaticAssessmentConfiguration==7.2,pyobjc-framework-Automator==7.2,pyobjc-framework-AVFoundation==7.2,pyobjc-framework-AVKit==7.2,pyobjc-framework-BusinessChat==7.2,pyobjc-framework-CalendarStore==7.2,pyobjc-framework-CallKit==7.2,pyobjc-framework-CFNetwork==7.2,pyobjc-framework-ClassKit==7.2,pyobjc-framework-CloudKit==7.2,pyobjc-framework-Cocoa==7.2,pyobjc-framework-Collaboration==7.2,pyobjc-framework-ColorSync==7.2,pyobjc-framework-Contacts==7.2,pyobjc-framework-ContactsUI==7.2,pyobjc-framework-CoreAudio==7.2,pyobjc-framework-CoreAudioKit==7.2,pyobjc-framework-CoreBluetooth==7.2,pyobjc-framework-CoreData==7.2,pyobjc-framework-CoreHaptics==7.2,pyobjc-framework-CoreLocation==7.2,pyobjc-framework-CoreMedia==7.2,pyobjc-framework-CoreMediaIO==7.2,pyobjc-framework-CoreMIDI==7.2,pyobjc-framework-CoreML==7.2,pyobjc-framework-CoreMotion==7.2,pyobjc-framework-CoreServices==7.2,pyobjc-framework-CoreSpotlight==7.2,pyobjc-framework-CoreText==7.2,pyobjc-framework-CoreWLAN==7.2,pyobjc-framework-CryptoTokenKit==7.2,pyobjc-framework-DeviceCheck==7.2,pyobjc-framework-DictionaryServices==7.2,pyobjc-framework-DiscRecording==7.2,pyobjc-framework-DiscRecordingUI==7.2,pyobjc-framework-DiskArbitration==7.2,pyobjc-framework-DVDPlayback==7.2,pyobjc-framework-EventKit==7.2,pyobjc-framework-ExceptionHandling==7.2,pyobjc-framework-ExecutionPolicy==7.2,pyobjc-framework-ExternalAccessory==7.2,pyobjc-framework-FileProvider==7.2,pyobjc-framework-FileProviderUI==7.2,pyobjc-framework-FinderSync==7.2,pyobjc-framework-FSEvents==7.2,pyobjc-framework-GameCenter==7.2,pyobjc-framework-GameController==7.2,pyobjc-framework-GameKit==7.2,pyobjc-framework-GameplayKit==7.2,pyobjc-framework-ImageCaptureCore==7.2,pyobjc-framework-IMServicePlugIn==7.2,pyobjc-framework-InputMethodKit==7.2,pyobjc-framework-InstallerPlugins==7.2,pyobjc-framework-InstantMessage==7.2,pyobjc-framework-Intents==7.2,pyobjc-framework-IOSurface==7.2,pyobjc-framework-iTunesLibrary==7.2,pyobjc-framework-KernelManagement==7.2,pyobjc-framework-LatentSemanticMapping==7.2,pyobjc-framework-LaunchServices==7.2,pyobjc-framework-libdispatch==7.2,pyobjc-framework-LinkPresentation==7.2,pyobjc-framework-LocalAuthentication==7.2,pyobjc-framework-MapKit==7.2,pyobjc-framework-MediaAccessibility==7.2,pyobjc-framework-MediaLibrary==7.2,pyobjc-framework-MediaPlayer==7.2,pyobjc-framework-MediaToolbox==7.2,pyobjc-framework-Metal==7.2,pyobjc-framework-MetalKit==7.2,pyobjc-framework-MetalPerformanceShaders==7.2,pyobjc-framework-MetalPerformanceShadersGraph==7.2,pyobjc-framework-MLCompute==7.2,pyobjc-framework-ModelIO==7.2,pyobjc-framework-MultipeerConnectivity==7.2,pyobjc-framework-NaturalLanguage==7.2,pyobjc-framework-NetFS==7.2,pyobjc-framework-Network==7.2,pyobjc-framework-NetworkExtension==7.2,pyobjc-framework-NotificationCenter==7.2,pyobjc-framework-OpenDirectory==7.2,pyobjc-framework-OSAKit==7.2,pyobjc-framework-OSLog==7.2,pyobjc-framework-PassKit==7.2,pyobjc-framework-PencilKit==7.2,pyobjc-framework-Photos==7.2,pyobjc-framework-PhotosUI==7.2,pyobjc-framework-PreferencePanes==7.2,pyobjc-framework-PushKit==7.2,pyobjc-framework-Quartz==7.2,pyobjc-framework-QuickLookThumbnailing==7.2,pyobjc-framework-ReplayKit==7.2,pyobjc-framework-SafariServices==7.2,pyobjc-framework-SceneKit==7.2,pyobjc-framework-ScreenSaver==7.2,pyobjc-framework-ScreenTime==7.2,pyobjc-framework-ScriptingBridge==7.2,pyobjc-framework-SearchKit==7.2,pyobjc-framework-Security==7.2,pyobjc-framework-SecurityFoundation==7.2,pyobjc-framework-SecurityInterface==7.2,pyobjc-framework-ServiceManagement==7.2,pyobjc-framework-Social==7.2,pyobjc-framework-SoundAnalysis==7.2,pyobjc-framework-Speech==7.2,pyobjc-framework-SpriteKit==7.2,pyobjc-framework-StoreKit==7.2,pyobjc-framework-SyncServices==7.2,pyobjc-framework-SystemConfiguration==7.2,pyobjc-framework-SystemExtensions==7.2,pyobjc-framework-UniformTypeIdentifiers==7.2,pyobjc-framework-UserNotifications==7.2,pyobjc-framework-UserNotificationsUI==7.2,pyobjc-framework-VideoSubscriberAccount==7.2,pyobjc-framework-VideoToolbox==7.2,pyobjc-framework-Virtualization==7.2,pyobjc-framework-Vision==7.2,pyobjc-framework-WebKit==7.2,pyparsing==2.4.7,pytest==6.2.4,pytest-black==0.3.12,pytest-checkdocs==2.7.0,pytest-cov==2.12.0,pytest-enabler==1.2.0,pytest-fixture-config==1.7.0,pytest-flake8==1.0.7,pytest-forked==1.3.0,pytest-mypy==0.8.1,pytest-shutil==1.7.0,pytest-virtualenv==1.7.0,pytest-xdist==2.2.1,pytz==2021.1,regex==2021.4.4,requests==2.25.1,singledispatch==3.6.1,six==1.16.0,snowballstemmer==2.1.0,Sphinx==4.0.1,sphinxcontrib-applehelp==1.0.2,sphinxcontrib-devhelp==1.0.2,sphinxcontrib-htmlhelp==1.0.3,sphinxcontrib-jsmath==1.0.1,sphinxcontrib-qthelp==1.0.3,sphinxcontrib-serializinghtml==1.1.4,termcolor==1.1.0,toml==0.10.2,tox==3.23.1,typed-ast==1.4.3,typing-extensions==3.10.0.0,urllib3==1.26.4,virtualenv==20.4.6,zipp==3.4.1
python run-test-pre: PYTHONHASHSEED='309040051'
python run-test: commands[0] | pytest --mypy
============================= test session starts ==============================
platform darwin -- Python 3.9.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
cachedir: .tox/python/.pytest_cache
rootdir: /Users/jaraco/code/public/pypa/setuptools, configfile: pytest.ini
plugins: flake8-1.0.7, cov-2.12.0, black-0.3.12, enabler-1.2.0, mypy-0.8.1, shutil-1.7.0, checkdocs-2.7.0, xdist-2.2.1, virtualenv-1.7.0, forked-1.3.0
gw0 I / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 I
gw0 [951] / gw1 [951] / gw2 [951] / gw3 [951] / gw4 [951] / gw5 [951] / gw6 [951] / gw7 [951]

sss..s.................sssssFs.....Fs.s.sFsFss...s..Fss.Fs..s.....s.F.s. [  7%]
..F.sFsF...s....s...F..s.........F.s..F....s..sF.s.ssFs.ss.s....s.s.s..s [ 15%]
F..s....ss......ss.s...F.s...ssss..s.s.s...s..sss..X.s.Fs...Fs.s.s.s..s. [ 22%]
ss.s....s.s..........FsF.F..s..s....F..............F.F.F..FF.....s...... [ 30%]
.........................s.................FF.s......................... [ 37%]
...........................................................ss........... [ 45%]
...........................................................x............ [ 52%]
....................................F................................... [ 60%]
.............................x.......x....F............................. [ 68%]
s.s..................................................................... [ 75%]
.............ssss...................................F................... [ 83%]
......xx...x......x......................................F.............. [ 90%]
...........x...F.........................x......sss..................... [ 98%]
..........s....                                                          [100%]
=================================== FAILURES ===================================
_________________________________ test session _________________________________
[gw1] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
mypy exited with status 1.
__________________________ pkg_resources/__init__.py ___________________________
[gw4] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
48: error: Name '_imp' already defined (by an import)
72: error: Incompatible types in assignment (expression has type "None", variable has type Module)
74: error: Module 'pkg_resources.extern' has no attribute 'appdirs'
75: error: Module 'pkg_resources.extern' has no attribute 'packaging'
__________________ pkg_resources/tests/test_pkg_resources.py ___________________
[gw5] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
15: error: Name 'mock' already defined (by an import)
46: error: Need type annotation for 'finalizers' (hint: "finalizers: List[<type>] = ...")
____________________________ setuptools/sandbox.py _____________________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
22: error: Name 'file' is not defined
307: error: Argument 1 to "_mk_dual_path_wrapper" has incompatible type "str"; expected "AbstractSandbox"
320: error: Argument 1 to "_mk_single_path_wrapper" has incompatible type "str"; expected "AbstractSandbox"
321: error: Argument 1 to "_mk_single_path_wrapper" has incompatible type "str"; expected "AbstractSandbox"
328: error: Argument 1 to "_mk_single_path_wrapper" has incompatible type "str"; expected "AbstractSandbox"
343: error: Argument 1 to "_mk_single_with_return" has incompatible type "str"; expected "AbstractSandbox"
358: error: Argument 1 to "_mk_query" has incompatible type "str"; expected "AbstractSandbox"
_______________________ setuptools/command/build_ext.py ________________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
5: error: Module 'distutils.command.build_ext' has no attribute 'build_ext'
25: error: Module 'distutils.sysconfig' has no attribute '_config_vars'; maybe "get_config_vars" or "get_config_var"?
________________________ setuptools/command/build_py.py ________________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
16: error: Name 'Mixin2to3' already defined (possibly by an import)
______________________ setuptools/command/easy_install.py ______________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
20: error: Module 'distutils.command.install' has no attribute 'INSTALL_SCHEMES'
22: error: Module 'distutils.command.build_scripts' has no attribute 'first_line_re'
1690: error: Cannot assign to a type
1936: error: All conditional function variants must have identical signatures
1954: error: Need type annotation for 'options' (hint: "options: List[<type>] = ...")
1955: error: Need type annotation for 'split_args' (hint: "split_args: Dict[<type>, <type>] = ...")
___________________________________ setup.py ___________________________________
[gw0] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
24: error: Module has no attribute "_name"; maybe "name", "uname", or "__name__"?
86: error: Need type annotation for 'setup_params'
99: error: Unsupported operand types for + ("List[<nothing>]" and "List[str]")
104: error: "chdir" does not return a value
________________________ setuptools/command/egg_info.py ________________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
31: error: Module 'setuptools.extern' has no attribute 'packaging'
________________________ setuptools/command/install.py _________________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
18: error: "Type[install]" has no attribute "user_options"
23: error: "Type[install]" has no attribute "boolean_options"
124: error: Unsupported operand types for + ("List[Tuple[str, Optional[Callable[[Command], bool]]]]" and "List[Tuple[str, Callable[[Any], bool]]]")
______________________ setuptools/command/install_lib.py _______________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
7: error: Name 'orig.install_lib' is not defined
____________________ setuptools/command/install_scripts.py _____________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
10: error: Name 'orig.install_scripts' is not defined
_______________________ setuptools/command/py36compat.py _______________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
131: error: Module has no attribute "sdist"
133: error: Name 'sdist_add_defaults' already defined on line 7
________________________ setuptools/command/register.py ________________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
7: error: Name 'orig.register' is not defined
_________________________ setuptools/command/rotate.py _________________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
20: error: Need type annotation for 'boolean_options' (hint: "boolean_options: List[<type>] = ...")
_________________________ setuptools/command/sdist.py __________________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
22: error: Name 'orig.sdist' is not defined
36: error: Need type annotation for 'negative_opt' (hint: "negative_opt: Dict[<type>, <type>] = ...")
_____________________________ setuptools/config.py _____________________________
[gw5] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
171: error: Need type annotation for 'aliases' (hint: "aliases: Dict[<type>, <type>] = ...")
482: error: Incompatible types in assignment (expression has type "str", base class "ConfigHandler" defined the type as "None")
573: error: Incompatible types in assignment (expression has type "str", base class "ConfigHandler" defined the type as "None")
______________________ setuptools/tests/test_bdist_egg.py ______________________
[gw4] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
48: error: Argument 1 to "__call__" of "_XfailMarkDecorator" has incompatible type "Optional[str]"; expected "Union[str, bool]"
______________________ setuptools/command/upload_docs.py _______________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
50: error: List item 0 has incompatible type "Tuple[str, Callable[[upload_docs], Any]]"; expected "Tuple[str, Optional[Callable[[Command], bool]]]"
_____________________________ setuptools/monkey.py _____________________________
[gw1] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
15: error: Need type annotation for '__all__' (hint: "__all__: List[<type>] = ...")
__________________________ setuptools/ssl_support.py ___________________________
[gw1] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
15: error: Incompatible types in assignment (expression has type "None", variable has type Module)
37: error: Incompatible types in assignment (expression has type "Type[object]", variable has type "Type[HTTPSHandler]")
37: error: Incompatible types in assignment (expression has type "Type[object]", variable has type "Type[HTTPSConnection]")
47: error: Incompatible import of "CertificateError" (imported name has type "Type[CertificateError]", local name has type "Type[SSLCertVerificationError]")
50: error: Cannot assign multiple types to name "CertificateError" without an explicit "Type[...]" annotation
50: error: Incompatible types in assignment (expression has type "None", variable has type "Type[SSLCertVerificationError]")
51: error: Incompatible types in assignment (expression has type "None", variable has type "Callable[[Union[Dict[str, Union[str, Tuple[Tuple[Tuple[str, str], ...], ...], Tuple[Tuple[str, str], ...]]], bytes, None], str], None]")
55: error: Name 'CertificateError' already defined (possibly by an import)
_______________________ setuptools/command/bdist_rpm.py ________________________
[gw1] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
4: error: Name 'orig.bdist_rpm' is not defined
____________________ pkg_resources/tests/test_resources.py _____________________
[gw3] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
8: error: Module 'pkg_resources.extern' has no attribute 'packaging'
____________________________ setuptools/__init__.py ____________________________
[gw3] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
162: error: Variable "setuptools._Command" is not valid as a type
162: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
162: error: Invalid base class "_Command"
______________________________ setuptools/dist.py ______________________________
[gw3] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
17: error: Module 'distutils.fancy_getopt' has no attribute 'translate_longopt'
30: error: Module 'setuptools.extern' has no attribute 'packaging'
31: error: Module 'setuptools.extern' has no attribute 'ordered_set'
366: error: Variable "setuptools.dist._Distribution" is not valid as a type
366: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
366: error: Invalid base class "_Distribution"
______________________________ setuptools/msvc.py ______________________________
[gw3] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
42: error: Name 'winreg' already defined (by an import)
48: error: Incompatible types in assignment (expression has type "Dict[<nothing>, <nothing>]", variable has type "_Environ[str]")
________________________ setuptools/command/__init__.py ________________________
[gw3] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
1: error: Module 'distutils.command.bdist' has no attribute 'bdist'
_______________________ setuptools/command/build_clib.py _______________________
[gw3] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
7: error: Name 'orig.build_clib' is not defined
___________________________ setuptools/extension.py ____________________________
[gw7] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
30: error: Variable "setuptools.extension._Extension" is not valid as a type
30: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
30: error: Invalid base class "_Extension"
___________________________ setuptools/lib2to3_ex.py ___________________________
[gw7] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
8: error: Module 'distutils.util' has no attribute 'Mixin2to3'
______________________ setuptools/tests/test_egg_info.py _______________________
[gw6] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
52: error: Incompatible return value type (got "Tuple[int, ...]", expected "Tuple[int, int]")
_______________________ setuptools/tests/test_extern.py ________________________
[gw7] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
5: error: Module 'setuptools.extern' has no attribute 'ordered_set'
______________________ setuptools/tests/test_register.py _______________________
[gw4] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
8: error: Name 'mock' already defined (by an import)
_______________________ setuptools/tests/test_upload.py ________________________
[gw2] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
8: error: Name 'mock' already defined (by an import)
______________________ setuptools/tests/test_manifest.py _______________________
[gw7] darwin -- Python 3.9.2 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python
139: error: No overload variant of "zip" matches argument types "Iterator[str]", "object"
139: note: Possible overload variant:
139: note:     def [_T1, _T2] zip(Iterable[_T1], Iterable[_T2]) -> Iterator[Tuple[_T1, _T2]]
139: note:     <5 more non-matching overloads not shown>

---------- coverage: platform darwin, python 3.9.2-final-0 -----------
Name                                                                                                                                                                      Stmts   Miss  Cover   Missing
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_distutils_hack/__init__.py                                                                                                                                                  67     39    42%   17-23, 33-38, 50-57, 68-69, 74-79, 82-93, 100-103, 110-111, 121
_distutils_hack/override.py                                                                                                                                                   1      0   100%
bootstrap.py                                                                                                                                                                  3      0   100%
conftest.py                                                                                                                                                                   8      2    75%   28-29
docs/conf.py                                                                                                                                                                 19      0   100%
pavement.py                                                                                                                                                                  35     23    34%   9-10, 15-16, 23-30, 38, 46-58, 62-64, 68-70
pkg_resources/__init__.py                                                                                                                                                  1562    206    87%   46-48, 52-53, 60-62, 71-72, 82, 180-182, 296, 300, 304-306, 309, 312, 345-347, 357-362, 369, 382-392, 445, 450-454, 468, 474, 479, 484, 567-572, 581-594, 647-651, 663, 840, 1074, 1080, 1085-1088, 1124, 1136, 1142, 1155-1178, 1197-1198, 1219, 1222-1230, 1272, 1385, 1388, 1420, 1431, 1434-1455, 1458, 1463, 1468, 1556, 1608, 1633, 1636, 1710, 1720, 1730, 1737-1738, 1754-1759, 1764, 1773, 1787-1802, 1815, 1827, 1859, 1884, 1891, 1901-1903, 1976, 1985-1988, 2108-2115, 2123, 2209, 2233-2234, 2268, 2271-2272, 2321, 2381-2382, 2419, 2435, 2459-2460, 2464, 2510, 2614, 2617, 2620, 2629, 2651-2674, 2837, 2843-2846, 2858, 2862, 2905, 2927-2929, 2936, 2943-2950, 3060-3061, 3149, 3170
pkg_resources/_vendor/__init__.py                                                                                                                                             0      0   100%
pkg_resources/_vendor/appdirs.py                                                                                                                                            257    211    18%   29-39, 77-97, 131-163, 195-203, 236-254, 291-300, 306-308, 310, 345-353, 388-404, 411-415, 419, 424, 429, 434, 439, 444, 449, 460-476, 480-503, 507-530, 533-556, 559-571, 577-608
pkg_resources/_vendor/packaging/__about__.py                                                                                                                                 10      0   100%
pkg_resources/_vendor/packaging/__init__.py                                                                                                                                   3      0   100%
pkg_resources/_vendor/packaging/_compat.py                                                                                                                                   13      1    92%   22
pkg_resources/_vendor/packaging/_structures.py                                                                                                                               41      8    80%   22, 30, 38, 42, 63, 71, 79, 83
pkg_resources/_vendor/packaging/_typing.py                                                                                                                                    4      1    75%   48
pkg_resources/_vendor/packaging/markers.py                                                                                                                                  133      9    93%   64, 68, 205, 224, 254, 264, 277-278, 312
pkg_resources/_vendor/packaging/requirements.py                                                                                                                              79      4    95%   111, 115, 136, 145
pkg_resources/_vendor/packaging/specifiers.py                                                                                                                               310    131    58%   124-130, 148-151, 153, 159-167, 195, 200, 204, 221, 231-260, 290-292, 296, 300, 304, 308, 312, 316, 327, 454-466, 477-498, 523, 553-554, 580-581, 586-587, 596, 605, 615, 620, 627, 635-642, 647-661, 690-696, 708-728, 733, 735, 741-746, 762-773, 778, 782, 795, 804, 822-863
pkg_resources/_vendor/packaging/utils.py                                                                                                                                     26      4    85%   22-23, 43, 63
pkg_resources/_vendor/packaging/version.py                                                                                                                                  214     29    86%   96, 101, 114, 118, 123, 128, 133, 138, 143, 148, 153, 158, 163, 168, 173, 222, 303, 378-387, 402, 407, 412, 417, 439, 441, 445
pkg_resources/_vendor/pyparsing.py                                                                                                                                         2533   1310    48%   96-97, 103-106, 110-114, 151-181, 189-193, 212-213, 226, 234-241, 244, 247, 252-257, 259, 309, 312, 320, 322, 381, 385, 392, 394, 418, 425-426, 440-442, 452, 455, 463-466, 469, 472, 485-504, 545-561, 580-583, 599-603, 617, 632-635, 641-642, 650-656, 659-661, 680-685, 688, 691, 699, 739-753, 770-825, 828-832, 856-869, 889-914, 937, 941, 948-958, 961, 964, 978-979, 991, 996-1001, 1004, 1007, 1010, 1014, 1053-1058, 1075-1090, 1097-1098, 1121, 1142, 1201, 1226-1227, 1237-1248, 1319-1320, 1335-1336, 1339-1349, 1353, 1375-1393, 1413-1425, 1436-1437, 1445, 1448-1453, 1457-1475, 1480-1533, 1543-1563, 1600-1606, 1640, 1646-1648, 1651, 1688-1727, 1746-1770, 1790-1797, 1812-1819, 1836-1838, 1848-1850, 1857-1863, 1869-1875, 1902, 1904-1909, 1914-1916, 1919, 1921, 1923, 1932-1935, 1940, 1946, 1953, 1955-1957, 1964-1970, 1977, 1979-1981, 1988-1994, 2000-2006, 2012-2018, 2076-2077, 2092-2100, 2106-2110, 2147-2151, 2157, 2165, 2171, 2179-2191, 2194-2199, 2202, 2205, 2208, 2211, 2226-2230, 2319-2361, 2388-2392, 2395, 2418-2421, 2459-2477, 2480-2491, 2494-2496, 2502, 2516-2520, 2523-2525, 2537, 2540-2543, 2571-2577, 2580-2603, 2658, 2671, 2676, 2693, 2701, 2704-2705, 2726, 2732, 2734-2735, 2740, 2785, 2794-2806, 2869-2870, 2875-2878, 2891-2892, 2903, 2909, 2911-2912, 2918-2921, 2944-2951, 2955, 2959, 2997, 3002, 3019-3030, 3040, 3073, 3078-3079, 3082-3094, 3109-3110, 3113-3119, 3122-3127, 3156-3158, 3170-3178, 3191-3192, 3208-3211, 3222-3224, 3227-3231, 3242-3245, 3248-3253, 3263, 3266, 3271, 3274-3277, 3281, 3284-3286, 3298-3307, 3310-3317, 3358-3361, 3386-3388, 3404-3405, 3407-3415, 3423-3425, 3428-3432, 3436, 3463, 3477-3480, 3490-3494, 3500, 3504-3506, 3510, 3518-3520, 3545, 3558-3561, 3569, 3572-3574, 3578, 3586-3588, 3646-3649, 3652-3698, 3701-3707, 3710-3712, 3725, 3741, 3751-3760, 3769-3773, 3776-3779, 3810-3811, 3814-3815, 3837-3839, 3843, 3856, 3864, 3869, 3875, 3877, 3916, 3947, 3956, 3959, 4008-4012, 4019, 4082-4092, 4095-4139, 4165, 4177, 4180-4181, 4191-4195, 4199, 4205-4212, 4218-4220, 4224, 4262-4266, 4340-4361, 4387, 4395-4396, 4398-4402, 4404, 4427-4445, 4465, 4487-4498, 4501-4507, 4522-4535, 4551-4563, 4596-4644, 4679, 4712-4713, 4723, 4745-4746, 4784-4785, 4792-4795, 4809, 4823, 4858, 4863-4864, 4878-4879, 4885-4886, 4930, 4982-4994, 5029-5030, 5097-5146, 5215-5245, 5325-5359, 5369, 5607-5612, 5629-5634, 5659, 5675-5740
pkg_resources/extern/__init__.py                                                                                                                                             37      4    89%   22, 41-44
pkg_resources/tests/__init__.py                                                                                                                                               0      0   100%
pkg_resources/tests/test_find_distributions.py                                                                                                                               31      0   100%
pkg_resources/tests/test_markers.py                                                                                                                                           5      0   100%
pkg_resources/tests/test_pkg_resources.py                                                                                                                                   219     10    95%   14-15, 32-34, 246, 395-397, 414-415
pkg_resources/tests/test_resources.py                                                                                                                                       472      2    99%   784-785
pkg_resources/tests/test_working_set.py                                                                                                                                      54      0   100%
setup.py                                                                                                                                                                     36      1    97%   83
setuptools/__init__.py                                                                                                                                                      105      5    95%   178-179, 181, 200, 202
setuptools/_deprecation_warning.py                                                                                                                                            1      0   100%
setuptools/_imp.py                                                                                                                                                           54     14    74%   42-44, 57-60, 65-66, 72-75, 81
setuptools/_vendor/__init__.py                                                                                                                                                0      0   100%
setuptools/_vendor/ordered_set.py                                                                                                                                           144     84    42%   14-16, 35, 88-99, 113, 143, 178-186, 201-203, 220-226, 244-250, 256-257, 273, 276-278, 304-306, 324-327, 331, 347-353, 369-375, 389-391, 405-407, 424-427, 434-435, 452-455, 469-470, 484-486
setuptools/_vendor/packaging/__about__.py                                                                                                                                    10      0   100%
setuptools/_vendor/packaging/__init__.py                                                                                                                                      3      0   100%
setuptools/_vendor/packaging/_compat.py                                                                                                                                      13      1    92%   22
setuptools/_vendor/packaging/_structures.py                                                                                                                                  41     18    56%   10, 14, 18, 22, 26, 30, 34, 38, 42, 51, 55, 59, 63, 67, 71, 75, 79, 83
setuptools/_vendor/packaging/_typing.py                                                                                                                                       4      0   100%
setuptools/_vendor/packaging/specifiers.py                                                                                                                                  310    177    43%   124-130, 148-151, 153, 159-167, 171-174, 178-180, 185, 190, 195, 200, 204, 210-226, 231-260, 290-292, 296, 300, 304, 308, 312, 316, 326-328, 454-466, 475-509, 514, 523, 532, 540-559, 567-592, 596, 604-622, 627, 635-642, 647-661, 690-696, 704, 708-728, 734-735, 741-746, 754, 762-773, 778, 782, 788-810, 822-863
setuptools/_vendor/packaging/tags.py                                                                                                                                        375    190    49%   93-96, 108, 112, 140-142, 152, 160, 186, 188-196, 200, 242, 272-274, 292-305, 345, 355-358, 369-383, 403, 407, 423-431, 437, 449-459, 467-493, 505-513, 521-524, 553-592, 597-602, 610-622, 627-633, 638-642, 647-675, 680, 690-693, 714-720, 726, 747-748
setuptools/_vendor/packaging/utils.py                                                                                                                                        26      5    81%   43, 51, 55, 59, 63
setuptools/_vendor/packaging/version.py                                                                                                                                     214     48    78%   72, 76, 80, 84, 88, 92, 96, 100-103, 114, 118, 123, 128, 133, 138, 143, 148, 153, 158, 163, 168, 173, 222, 226, 303, 311, 318, 322, 373, 378-387, 392, 397, 402, 407, 412, 417, 439, 441, 443, 445, 451-453, 511
setuptools/archive_util.py                                                                                                                                                  100     20    80%   59, 108, 113, 116, 132-137, 146, 159, 165-166, 170, 173, 187-188, 198-200
setuptools/build_meta.py                                                                                                                                                    124      6    95%   95, 178-180, 183, 188-191
setuptools/command/__init__.py                                                                                                                                                6      0   100%
setuptools/command/alias.py                                                                                                                                                  52     40    23%   8-13, 29-31, 34-36, 42-65, 69-78
setuptools/command/bdist_egg.py                                                                                                                                             286     78    73%   22, 26-30, 44-56, 117-138, 141, 163, 171-179, 182, 184, 199-205, 207-209, 216, 263, 292, 298-306, 329, 331, 336, 349, 367, 371, 382-383, 385-392, 399, 402, 404-405, 412-413, 454-455
setuptools/command/bdist_rpm.py                                                                                                                                               9      5    44%   15-17, 20-31
setuptools/command/build_clib.py                                                                                                                                             34      0   100%
setuptools/command/build_ext.py                                                                                                                                             190     95    50%   19, 29-45, 54-59, 63, 72, 87-104, 116-117, 119-120, 136, 154, 156, 159-183, 187, 195, 198-199, 208-210, 213, 217-224, 227-230, 233-280, 291-320
setuptools/command/build_py.py                                                                                                                                              153     15    90%   14-17, 48, 127, 178, 193, 250-254, 260-270
setuptools/command/develop.py                                                                                                                                               120     42    65%   30-32, 47-49, 68, 100, 111-128, 139-140, 154-169, 174, 183-187
setuptools/command/dist_info.py                                                                                                                                              19      0   100%
setuptools/command/easy_install.py                                                                                                                                         1229    503    59%   75, 88, 210-216, 223-227, 255, 286-287, 295-307, 317, 328, 332, 337-342, 347, 351, 363-369, 375-378, 405, 410-417, 433-434, 449-450, 464, 467-468, 472-473, 479, 482, 525, 532-587, 596, 613, 623-624, 643-645, 660-663, 686-690, 699-700, 710-714, 736-737, 748, 750, 755, 760, 762, 764, 768-788, 792, 802-803, 814-819, 831, 836, 861-862, 866, 874, 879, 887-888, 913, 915, 923-926, 928-929, 933, 948-950, 957-998, 1004-1052, 1062, 1064, 1104-1106, 1126-1128, 1136-1137, 1141, 1148, 1169, 1201, 1204-1210, 1214, 1225, 1234-1238, 1246-1262, 1265-1281, 1317-1323, 1377, 1380, 1383, 1395, 1400, 1408-1419, 1438-1478, 1486-1519, 1525-1556, 1571, 1578-1597, 1600, 1602, 1607, 1616, 1620-1622, 1646-1649, 1661-1662, 1670-1673, 1690, 1699, 1706-1711, 1812, 1841-1845, 1854, 1870, 1883-1886, 1900, 1905-1910, 1922, 1924, 1929, 1934-1937, 1944-1945, 2021, 2096, 2124, 2138, 2180-2191, 2199-2205, 2216-2217, 2226-2248, 2264-2269, 2273-2274
setuptools/command/egg_info.py                                                                                                                                              394     36    91%   90, 214-215, 242-244, 258-264, 281-283, 297, 314-322, 378-379, 482, 507-508, 521-522, 535, 568, 583, 646, 673-675, 725-729
setuptools/command/install.py                                                                                                                                                63     29    54%   42-43, 63-67, 80-91, 98-118
setuptools/command/install_egg_info.py                                                                                                                                       39      4    90%   36, 38, 47, 57
setuptools/command/install_lib.py                                                                                                                                            63      6    90%   78, 118-122
setuptools/command/install_scripts.py                                                                                                                                        49      4    92%   39-40, 43-44
setuptools/command/py36compat.py                                                                                                                                             75     57    24%   30-36, 48-53, 56-74, 77-80, 86-96, 100-113, 116-118, 121-123, 126-128
setuptools/command/register.py                                                                                                                                                8      0   100%
setuptools/command/rotate.py                                                                                                                                                 43     30    30%   23-25, 28-43, 46-64
setuptools/command/saveopts.py                                                                                                                                               13      9    31%   10-22
setuptools/command/sdist.py                                                                                                                                                 108     19    82%   18-19, 58, 69, 91-92, 134-135, 155-156, 162-167, 181-183, 187
setuptools/command/setopt.py                                                                                                                                                 79     41    48%   18-27, 45-46, 53-61, 92-94, 97-111, 129-133, 136-140, 143
setuptools/command/test.py                                                                                                                                                  167     12    93%   39, 47-49, 65, 122-123, 224-225, 247, 257-259
setuptools/command/upload.py                                                                                                                                                  8      0   100%
setuptools/command/upload_docs.py                                                                                                                                           142     60    58%   64-68, 79-80, 91-101, 121, 143-202
setuptools/config.py                                                                                                                                                        307      1    99%   249
setuptools/dep_util.py                                                                                                                                                       11      1    91%   14
setuptools/depends.py                                                                                                                                                        92      9    90%   62-63, 110-111, 113, 169-172
setuptools/dist.py                                                                                                                                                          596    107    82%   43, 92, 137-139, 152-153, 228-232, 258, 264, 292-293, 330-331, 336, 438-439, 482-484, 491, 496-503, 633, 640, 648, 665-675, 700-702, 731, 734, 737, 752, 758-762, 812, 853-858, 861-866, 886, 929-930, 949-950, 1002-1006, 1029-1057, 1070, 1074, 1086, 1098-1108, 1128-1132
setuptools/errors.py                                                                                                                                                          2      0   100%
setuptools/extension.py                                                                                                                                                      28      2    93%   18, 47
setuptools/extern/__init__.py                                                                                                                                                37      4    89%   22, 41-44
setuptools/glob.py                                                                                                                                                           86     14    84%   43-44, 59, 101-102, 123-126, 152, 162-167
setuptools/installer.py                                                                                                                                                      60      5    92%   17-18, 28-29, 56
setuptools/launch.py                                                                                                                                                         15     11    27%   18-32, 36
setuptools/lib2to3_ex.py                                                                                                                                                     44      6    86%   18, 59-60, 65, 67-68
setuptools/monkey.py                                                                                                                                                         77     34    56%   32, 58-59, 71, 82-83, 95, 116-123, 127, 142-177
setuptools/msvc.py                                                                                                                                                          674    507    25%   37-38, 86-104, 127-142, 147-172, 187-209, 222-256, 261-292, 314-318, 327-331, 340-368, 383, 395, 406, 417, 435, 457, 479-480, 501, 513, 525, 537, 549, 561, 573, 585, 597, 609, 627-628, 646-668, 690-696, 708-716, 727-747, 759-789, 806, 819-823, 835-841, 852-871, 882-891, 903-912, 924, 936-967, 980-1002, 1014-1015, 1028-1035, 1047, 1060, 1075-1081, 1094-1097, 1110-1113, 1125, 1137, 1154-1166, 1185-1191, 1219-1225, 1237, 1249, 1261-1269, 1281, 1294-1303, 1315-1317, 1329-1354, 1366-1374, 1386-1396, 1410-1434, 1446, 1457-1481, 1493-1494, 1506-1509, 1521-1538, 1550-1554, 1566-1569, 1581, 1593-1609, 1621-1624, 1636-1642, 1654-1658, 1670-1671, 1683-1686, 1698-1721, 1737-1771, 1796-1804, 1817-1828
setuptools/namespaces.py                                                                                                                                                     55      9    84%   25-26, 32-37, 78
setuptools/package_index.py                                                                                                                                                 652    197    70%   56-57, 91, 93, 114, 146, 176, 195-202, 227-231, 236-238, 263, 282, 321, 327, 336, 344-345, 352, 354, 357-358, 366, 383-391, 398-404, 407-414, 417-430, 442, 457-458, 462, 467-473, 480, 486-492, 499, 503, 510-516, 526-528, 547, 552, 556-563, 590, 596-597, 631-636, 649-651, 666, 683-686, 689-724, 739, 760, 773, 779, 783, 786, 792, 799-803, 812-814, 817, 828, 830, 841, 846-858, 865-877, 917-930, 1010-1011, 1014, 1051-1052, 1074-1076, 1079-1083, 1093-1096, 1114, 1122, 1131-1138, 1141
setuptools/py34compat.py                                                                                                                                                     10      5    50%   5-6, 11-13
setuptools/sandbox.py                                                                                                                                                       266     22    92%   18, 50, 256-257, 279, 286, 292-293, 320, 366, 374, 383, 415-418, 426, 456, 462, 467-469
setuptools/ssl_support.py                                                                                                                                                   139     81    42%   14-15, 36-37, 45-51, 55-56, 61-152, 185-191, 200, 205-208, 235-249, 263-266
setuptools/tests/__init__.py                                                                                                                                                  6      0   100%
setuptools/tests/contexts.py                                                                                                                                                 62      6    90%   39-40, 95-98
setuptools/tests/environment.py                                                                                                                                              36     11    69%   9-14, 34, 36-37, 52-53
setuptools/tests/fixtures.py                                                                                                                                                 37      3    92%   58, 72-73
setuptools/tests/namespaces.py                                                                                                                                               23      0   100%
setuptools/tests/script-with-bom.py                                                                                                                                           1      0   100%
setuptools/tests/server.py                                                                                                                                                   47     10    79%   27-29, 32-33, 39-43, 46-47
setuptools/tests/test_archive_util.py                                                                                                                                        21      0   100%
setuptools/tests/test_bdist_egg.py                                                                                                                                           36      0   100%
setuptools/tests/test_build_clib.py                                                                                                                                          38      0   100%
setuptools/tests/test_build_ext.py                                                                                                                                           35      2    94%   44, 46
setuptools/tests/test_build_meta.py                                                                                                                                         180      0   100%
setuptools/tests/test_build_py.py                                                                                                                                            30      0   100%
setuptools/tests/test_config.py                                                                                                                                             356      0   100%
setuptools/tests/test_dep_util.py                                                                                                                                            19      0   100%
setuptools/tests/test_depends.py                                                                                                                                              8      0   100%
setuptools/tests/test_develop.py                                                                                                                                            123     46    63%   38-42, 47-58, 70-100, 110-125, 254
setuptools/tests/test_dist.py                                                                                                                                               106      2    98%   268-269
setuptools/tests/test_dist_info.py                                                                                                                                           38      0   100%
setuptools/tests/test_distutils_adoption.py                                                                                                                                  39      1    97%   43
setuptools/tests/test_easy_install.py                                                                                                                                       518     22    96%   54, 237-260, 268-278, 405-408, 411-413, 438, 584-585
setuptools/tests/test_egg_info.py                                                                                                                                           319      0   100%
setuptools/tests/test_extern.py                                                                                                                                              13      0   100%
setuptools/tests/test_find_packages.py                                                                                                                                      112      2    98%   21-22
setuptools/tests/test_glob.py                                                                                                                                                 8      0   100%
setuptools/tests/test_install_scripts.py                                                                                                                                     56     13    77%   56-62, 85-90
setuptools/tests/test_integration.py                                                                                                                                         67      4    94%   30-31, 37-38
setuptools/tests/test_manifest.py                                                                                                                                           297     10    97%   41-46, 338, 344, 470-473
setuptools/tests/test_msvc.py                                                                                                                                                79     71    10%   20-179
setuptools/tests/test_msvc14.py                                                                                                                                              47     36    23%   17-32, 35-50, 53-66, 69-82
setuptools/tests/test_namespaces.py                                                                                                                                          51      0   100%
setuptools/tests/test_packageindex.py                                                                                                                                       169      7    96%   35, 54, 71, 93, 103-106
setuptools/tests/test_register.py                                                                                                                                            15      2    87%   7-8
setuptools/tests/test_sandbox.py                                                                                                                                             81      3    96%   20-21, 119
setuptools/tests/test_sdist.py                                                                                                                                              281     26    91%   56, 61-62, 74-75, 349-355, 378-384, 409-427
setuptools/tests/test_setopt.py                                                                                                                                              21      0   100%
setuptools/tests/test_setuptools.py                                                                                                                                         198      5    97%   44, 48-49, 286-287
setuptools/tests/test_sphinx_upload_docs.py                                                                                                                                  17      0   100%
setuptools/tests/test_test.py                                                                                                                                                81      0   100%
setuptools/tests/test_unicode_utils.py                                                                                                                                        4      0   100%
setuptools/tests/test_upload.py                                                                                                                                              15      2    87%   7-8
setuptools/tests/test_upload_docs.py                                                                                                                                         34      0   100%
setuptools/tests/test_virtualenv.py                                                                                                                                          69      1    99%   28
setuptools/tests/test_wheel.py                                                                                                                                              112      0   100%
setuptools/tests/test_windows_wrappers.py                                                                                                                                    59     34    42%   30-31, 43-51, 89-108, 121-149, 171-186
setuptools/tests/text.py                                                                                                                                                      4      0   100%
setuptools/tests/textwrap.py                                                                                                                                                  3      0   100%
setuptools/unicode_utils.py                                                                                                                                                  27     11    59%   7-15, 33-34
setuptools/version.py                                                                                                                                                         5      2    60%   5-6
setuptools/wheel.py                                                                                                                                                         122      4    97%   48-49, 121, 184
setuptools/windows_support.py                                                                                                                                                16      9    44%   8, 20-29
tools/finalize.py                                                                                                                                                            37     22    41%   36-38, 42-49, 56-60, 64-65, 72, 80-82, 90-94
tools/ppc64le-patch.py                                                                                                                                                       10      5    50%   15-25
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_build_wheel_build_backend0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_build_wheel_build_backend1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_build_wheel_build_backend2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_build_with_empty_setuppy_0/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_build_with_empty_setuppy_1/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_build_with_empty_setuppy_2/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_build_with_empty_setuppy_3/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_build_with_empty_setuppy_4/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_build_with_empty_setuppy_5/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_build_with_empty_setuppy_6/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_build_with_empty_setuppy_7/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_get_requires_for_build_sd0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_get_requires_for_build_sd1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_get_requires_for_build_sd2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_get_requires_for_build_wh0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_get_requires_for_build_wh1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw0/test_get_requires_for_build_wh2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_build_sdist_builds_targz_0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_build_sdist_pyproject_tom0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_build_sdist_setup_py_exis0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_build_sdist_setup_py_mani0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_False___fo0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_False__foo0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_False__foo1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_True____Ha0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_True___foo0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_True___foo1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_True___foo2/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_True__foo_0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_True__foo_1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_True__foo_2/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_True__foo_3/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_True__foo_4/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_True__foo_5/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw1/test_setup_requires_True__foo_6/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_build_sdist_builds_targz_0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_build_sdist_explicit_dist0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_build_sdist_explicit_dist1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_build_sdist_explicit_dist2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_build_sdist_pyproject_tom0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_build_sdist_relative_path0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_build_sdist_setup_py_exis0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_build_sdist_setup_py_mani0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_build_sdist_version_chang0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_build_sdist_version_chang1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_build_sdist_version_chang2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_license0/setup.py                                                          2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_license_escape0/setup.py                                                   2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_license_file_attr_pkg_inf0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_long_description0/setup.py                                                 2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_long_description_content_0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_metadata_version0/setup.py                                                 2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_prepare_metadata_for_buil0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_prepare_metadata_for_buil1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_prepare_metadata_for_buil2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_project_urls0/setup.py                                                     2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_python_requires_egg_info0/setup.py                                         2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_setup_cfg_license_file_li0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_setup_cfg_license_file_li1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_setup_cfg_license_file_li2/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_setup_cfg_license_file_li3/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_setup_cfg_license_file_li4/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_setup_cfg_license_file_li5/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_setup_cfg_license_file_li6/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_setup_cfg_license_file_li7/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_setup_cfg_license_file_li8/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_setup_requires_True___foo0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_setup_requires_True__foo_0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_setup_requires_True__foo_1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw2/test_setup_requires_True__foo_2/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_build_sdist_relative_path0/hello.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_build_sdist_relative_path0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_build_with_empty_setuppy_0/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_build_with_empty_setuppy_1/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_build_with_empty_setuppy_2/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_build_with_empty_setuppy_3/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_build_with_empty_setuppy_4/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_build_with_empty_setuppy_5/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_build_with_empty_setuppy_6/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_build_with_empty_setuppy_7/setup.py                                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_dont_install_setup_requir0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_setup_requires_False____H0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_setup_requires_False___fo0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_setup_requires_False___fo1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_setup_requires_False__foo0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_setup_requires_False__foo1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_setup_requires_False__foo2/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_setup_requires_False__foo3/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_setup_requires_False__foo4/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_setup_requires_with_pytho0/test_pkg/setup.py                               2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_test0/build/lib/name/__init__.py                                           5      3    40%   5-7
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_test0/build/lib/name/space/__init__.py                                     0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_test0/build/lib/name/space/tests/__init__.py                               5      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_tests_are_run_once0/dummy/__init__.py                                      0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw3/test_tests_are_run_once0/dummy/test_dummy.py                                    4      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_build_sdist_build_backend0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_build_sdist_build_backend1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_build_sdist_build_backend2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_build_sdist_explicit_dist0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_build_sdist_explicit_dist1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_build_sdist_explicit_dist2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_build_sdist_version_chang0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_build_sdist_version_chang1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_build_sdist_version_chang2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_build_with_existing_file_0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_build_with_existing_file_1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_deprecation_stderr0/build/lib/name/__init__.py                             5      3    40%   5-7
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_deprecation_stderr0/build/lib/name/space/__init__.py                       0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_deprecation_stderr0/build/lib/name/space/tests/__init__.py                 5      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_doesnt_provides_extra0/setup.py                                            2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_prepare_metadata_for_buil0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_prepare_metadata_for_buil1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_prepare_metadata_for_buil2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_file_fi0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_file_fi1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_file_fi2/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_file_fi3/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_file_gl0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_files_d0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_files_f0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_files_f1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_files_f2/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_files_f3/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_files_f4/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_files_f5/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_files_f6/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_files_f7/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_files_f8/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_files_f9/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_cfg_license_files_n0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_setup_py_with_CRLF0/setup.py                                               0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_warns_deprecation0/build/lib/name/__init__.py                              5      3    40%   5-7
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_warns_deprecation0/build/lib/name/space/__init__.py                        0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw4/test_warns_deprecation0/build/lib/name/space/tests/__init__.py                  5      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_build_ext_config_handling0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_build_sdist_build_backend0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_build_sdist_build_backend1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_build_sdist_build_backend2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_build_wheel_build_backend0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_build_wheel_build_backend1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_build_wheel_build_backend2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_build_with_existing_file_0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_build_with_existing_file_1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_extras_require_with_inval0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_extras_require_with_inval1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_get_requires_for_build_sd0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_get_requires_for_build_sd1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_get_requires_for_build_sd2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_get_requires_for_build_wh0/setup.py                                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_get_requires_for_build_wh1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_get_requires_for_build_wh2/setup.py                                        5      1    80%   3
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_install_requires_unordere0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_provides_extra0/setup.py                                                   2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_extras_require_w0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_extras_require_w1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_extras_require_w2/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_extras_require_w3/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_extras_require_w4/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_extras_require_w5/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_extras_require_w6/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_extras_require_w7/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_extras_require_w8/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_extras_require_w9/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_install_requires0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_setup_requires_w0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_setup_requires_w1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_tests_require_wi0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_requires_tests_require_wi1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_two_levels_deep0/site-pkgs/pkg1/__init__.py                                1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw5/test_two_levels_deep0/site-pkgs/pkg1/pkg2/__init__.py                           1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_dont_install_setup_requir0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_expected_files_produced0/setup.py                                          2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_license_is_a_string0/setup.py                                              2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_manifest_template_is_read0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_mixed_site_and_non_site0/path-packages/myns/pkgB.py                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_mixed_site_and_non_site0/site-packages/myns/pkgA.py                        1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_mixed_site_and_non_site0/site-packages/sitecustomize.py                    1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_namespace_package_install0/myns.pkgA/myns/pkgA.py                          1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_namespace_package_install0/packages/sitecustomize.py                       1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_packages_in_the_same_name0/myns.pkgB/myns/pkgB.py                          1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_packages_in_the_same_name0/packages/myns/pkgA.py                           1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_packages_in_the_same_name0/packages/sitecustomize.py                       1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_path_order0/site-pkgs/nspkg/__init__.py                                    1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_path_order0/site-pkgs/nspkg/subpkg/__init__.py                             1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_pkg_resources_import0/packages/sitecustomize.py                            1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_rebuilt0/setup.py                                                          2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_requires_install_requires0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_requires_install_requires1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_requires_install_requires2/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_requires_install_requires3/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_requires_install_requires4/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_requires_install_requires5/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_requires_install_requires6/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_requires_install_requires7/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_requires_install_requires8/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_False____H0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_False___fo0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_False___fo1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_False___fo2/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_False__foo0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_False__foo1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_False__foo2/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_False__foo3/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_False__foo4/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_False__foo5/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_False__foo6/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_True____Ha0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_True___foo0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_True___foo1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_True__foo_0/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_True__foo_1/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_True__foo_2/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_setup_requires_True__foo_3/setup.py                                        2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw6/test_sys_argv_passthrough0/setup.py                                             6      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw7/test_editable_prefix0/prefix/bin/sample                                        18      5    72%   11-15
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw7/test_editable_prefix0/prefix/lib/python3.9/site-packages/sitecustomize.py       4      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw7/test_editable_prefix0/sampleproject/setup.py                                    5      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw7/test_editable_prefix0/sampleproject/src/sample/__init__.py                      2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw7/test_egg_info_tag_only_once0/setup.py                                           2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw7/test_namespace_package_importa0/myns.pkgB/myns/pkgB.py                          1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw7/test_namespace_package_importa0/myns.pkgB/setup.py                              2      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw7/test_namespace_package_importa0/packages/myns/pkgA.py                           1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw7/test_namespace_package_importa0/packages/sitecustomize.py                       1      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw7/test_sys_argv_passthrough0/setup.py                                             6      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw7/test_version0/fake_package/__init__.py                                          4      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw7/test_version0/fake_package/subpkg_a/__init__.py                                 0      0   100%
/private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pytest-of-jaraco/pytest-29/popen-gw7/test_version0/fake_package/subpkg_b/__init__.py                                 0      0   100%
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL                                                                                                                                                                     18844   5063    73%

===================================== mypy =====================================
Found 73 errors in 34 files (checked 111 source files)
=========================== short test summary info ============================
SKIPPED [1] setuptools/tests/test_msvc.py:17: could not import 'distutils.msvc9compiler': No module named 'winreg'
SKIPPED [74] .tox/python/lib/python3.9/site-packages/pytest_flake8.py:116: file(s) previously passed FLAKE8 checks
SKIPPED [3] pkg_resources/tests/test_pkg_resources.py:399: Testing systems using backslashes as path separators.
SKIPPED [1] pkg_resources/tests/test_pkg_resources.py:382: Testing case-insensitive filesystems.
SKIPPED [1] setuptools/tests/test_develop.py:65: Cannot run when invoked in a virtualenv or venv
SKIPPED [1] setuptools/tests/test_develop.py:107: TODO: needs a fixture to cause 'develop' to be invoked without mutating environment.
SKIPPED [1] setuptools/tests/test_install_scripts.py:50: Windows only
SKIPPED [1] setuptools/tests/test_install_scripts.py:78: Windows only
SKIPPED [1] setuptools/tests/test_msvc14.py:16: These tests are only for win32
SKIPPED [1] setuptools/tests/test_msvc14.py:34: These tests are only for win32
SKIPPED [1] setuptools/tests/test_msvc14.py:52: These tests are only for win32
SKIPPED [1] setuptools/tests/test_msvc14.py:68: These tests are only for win32
SKIPPED [1] setuptools/tests/test_windows_wrappers.py:69: Windows only
SKIPPED [1] setuptools/tests/test_windows_wrappers.py:110: Windows only
SKIPPED [1] setuptools/tests/test_windows_wrappers.py:169: Windows only
SKIPPED [1] setuptools/tests/test_easy_install.py:262: Test can only be run on Linux
XFAIL setuptools/tests/test_dist.py::test_read_metadata[Metadata Version 2.1: Provides Extra-attrs9]
  provides_extras not read
XFAIL setuptools/tests/test_dist.py::test_read_metadata[Metadata Version 1.2: Project-Url-attrs5]
  Issue #1578: project_urls not read
XFAIL setuptools/tests/test_egg_info.py::TestEggInfo::test_requires[extras_require_with_marker_in_setup_cfg]
XFAIL setuptools/tests/test_integration.py::test_virtualenvwrapper
XFAIL setuptools/tests/test_sdist.py::TestSdistTest::test_sdist_with_utf8_encoded_filename
  System does not support latin-1 filenames
XFAIL setuptools/tests/test_sdist.py::TestSdistTest::test_sdist_with_latin1_encoded_filename
  System does not support latin-1 filenames
XFAIL setuptools/tests/test_sdist.py::TestSdistTest::test_read_manifest_skips_non_utf8_filenames
  System does not support latin-1 filenames
XFAIL setuptools/tests/test_integration.py::test_python_novaclient
XFAIL setuptools/tests/test_virtualenv.py::test_pip_upgrade_from_source[pip==19.3.1]
  pypa/pip#6599
XPASS setuptools/tests/test_archive_util.py::test_unicode_files #710 and #712
= 35 failed, 816 passed, 91 skipped, 9 xfailed, 1 xpassed in 162.58s (0:02:42) =
ERROR: InvocationError for command /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/pytest --mypy (exited with code 1)
___________________________________ summary ____________________________________
ERROR:   python: commands failed

@GergelyKalmar
Copy link
Author

It might be useful to add that in the meantime stubs were developed in typeshed: python/typeshed#5762

It seems to be ready to be released, once it is released I think the issue can be closed.

@Avasam
Copy link
Contributor

Avasam commented Jul 9, 2023

With Python 3.12 dropping disutils, setuptools' oldest python supported version now being 3.8 and the typeshed's setuptools stubs having matured a lot, what do you think about setuptools providing its own typing information?

This is the general [precise and continuously updated] plan I would suggest:

  1. Fix all immediately fixable typing errors seen by mypy with non-strict type checking, targeting only public API.
  2. Do the same with pyright Initial pyright config #4192
  3. Merge pkg_resources stubs from typeshed
    3.1. First exclude return-type, overload and TypeVar annotations Merge and update variable and params annotations from typeshed #4246
    3.2. Add overloads, TypeVars, required return types to pass type-checking, etc., from typeshed Generic typing for register methods in pkg_resources #4355 & pkg_resources: Merge @overload and TypeVar annotations from typeshed #4390
    3.3. Add explicit return types for public methods where incorrectly inferred by pyright (including partially Any) pkg_resources: fix incorrect implicit return types #4391
  4. Enforce return types for annotated public functions so mypy doesn't infer as Any Enforce return types for typed public functions & mark pkg_resources as py.typed #4409
  5. Publish pkg_resources as py.typed (typeshed will remove the package 6 months later). 08bd311
    We don't need to be fully typed, just to be on par with typeshed.
  6. Merge setuptools stubs from typeshed
    6.1. First exclude return-type annotations (this may mean disabling ANN2 for setuptools module) Merge simple type annotations from typeshed #4504
    6.2. Add overloads, TypeVars, return types, etc., from typeshed: Merge overloaded method definitions from typeshed #4506 & Merge typeshed return annotations #4744
    6.3. Run ruff --select=ANN204 with ignore-fully-untyped = false
    6.4. Fully type the setup method and other **kwargs typed in typeshed
  7. Publish setuptools as py.typed (typeshed will mark the stubs as "obsolete" for 6 months before removal).
    We don't need to be fully typed, just to be on par with typeshed.
  8. Enable rules in checkers (mypy/pyright/ruff) to ensure that no type annotations are missing (function definitions, return types, class members, etc)
    8.1 Start by allowing inferred return types, just to reduce the scope, and make this step easier for complex return types/overloads
    8.2 Add and enforce function return types
  9. Start type-checking private/internal (non-vendored) modules and symbols as well
  10. Turn on strict typing in mypy & pyright. Disable every rule that fails.
  11. Progressively re-enable relevant rules and fix them in code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants