Bug 253421 - REGRESSION(261097@main) [Win] test-webkitpy: Failed to install pytest-asyncio-0.20.3!
Summary: REGRESSION(261097@main) [Win] test-webkitpy: Failed to install pytest-asyncio...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Tools / Tests (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Fujii Hironori
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2023-03-05 17:40 PST by Fujii Hironori
Modified: 2023-03-07 12:56 PST (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Fujii Hironori 2023-03-05 17:40:55 PST
REGRESSION(261097@main) [Win] test-webkitpy: Failed to install pytest-asyncio-0.20.3!

After fleshing out the container image, WinCairo tester is failing to install pytest-asyncio-0.20.3
https://build.webkit.org/#/builders/727/builds/10707


Downloading pytest-asyncio-0.20.3...
Installing pytest-asyncio-0.20.3...
Traceback (most recent call last):
  File "C:\BW\WinCairo-64-bit-Debug-Tests\build\Tools\Scripts\libraries\autoinstalled\python-3-AMD64\setuptools\config.py", line 33, in __getattr__
    return next(
           ^^^^^
StopIteration
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "C:\BW\WinCairo-64-bit-Debug-Tests\build\Tools\Scripts\libraries\autoinstalled\python-3-AMD64\setuptools\config.py", line 387, in _parse_attr
    return getattr(StaticModule(module_name), attr_name)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\BW\WinCairo-64-bit-Debug-Tests\build\Tools\Scripts\libraries\autoinstalled\python-3-AMD64\setuptools\config.py", line 41, in __getattr__
    raise AttributeError(
AttributeError: pytest_asyncio has no attribute __version__
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "C:\Users\ContainerAdministrator\AppData\Local\Temp\pytest_asyncio-8808\pytest-asyncio-0.20.3\setup.py", line 3, in <module>
    setup()
  File "C:\BW\WinCairo-64-bit-Debug-Tests\build\Tools\Scripts\libraries\autoinstalled\python-3-AMD64\setuptools\__init__.py", line 153, in setup
    return distutils.core.setup(**attrs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\BW\WinCairo-64-bit-Debug-Tests\build\Tools\Scripts\libraries\autoinstalled\python-3-AMD64\setuptools\_distutils\core.py", line 121, in setup
    dist.parse_config_files()
  File "C:\BW\WinCairo-64-bit-Debug-Tests\build\Tools\Scripts\libraries\autoinstalled\python-3-AMD64\setuptools\dist.py", line 715, in parse_config_files
    parse_configuration(self, self.command_options,
  File "C:\BW\WinCairo-64-bit-Debug-Tests\build\Tools\Scripts\libraries\autoinstalled\python-3-AMD64\setuptools\config.py", line 157, in parse_configuration
    meta.parse()
  File "C:\BW\WinCairo-64-bit-Debug-Tests\build\Tools\Scripts\libraries\autoinstalled\python-3-AMD64\setuptools\config.py", line 463, in parse
    section_parser_method(section_options)
  File "C:\BW\WinCairo-64-bit-Debug-Tests\build\Tools\Scripts\libraries\autoinstalled\python-3-AMD64\setuptools\config.py", line 436, in parse_section
    self[name] = value
    ~~~~^^^^^^
  File "C:\BW\WinCairo-64-bit-Debug-Tests\build\Tools\Scripts\libraries\autoinstalled\python-3-AMD64\setuptools\config.py", line 220, in __setitem__
    value = parser(value)
            ^^^^^^^^^^^^^
  File "C:\BW\WinCairo-64-bit-Debug-Tests\build\Tools\Scripts\libraries\autoinstalled\python-3-AMD64\setuptools\config.py", line 552, in _parse_version
    version = self._parse_attr(value, self.package_dir)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\BW\WinCairo-64-bit-Debug-Tests\build\Tools\Scripts\libraries\autoinstalled\python-3-AMD64\setuptools\config.py", line 390, in _parse_attr
    module = importlib.import_module(module_name)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\tools\python3\Lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "C:\Users\ContainerAdministrator\AppData\Local\Temp\pytest_asyncio-8808\pytest-asyncio-0.20.3\pytest_asyncio\__init__.py", line 3, in <module>
    from .plugin import fixture
  File "C:\Users\ContainerAdministrator\AppData\Local\Temp\pytest_asyncio-8808\pytest-asyncio-0.20.3\pytest_asyncio\plugin.py", line 27, in <module>
    import pytest
ModuleNotFoundError: No module named 'pytest'
Failed to install pytest-asyncio-0.20.3!
Comment 1 Fujii Hironori 2023-03-06 19:26:52 PST
There are two problems.
setup.cfg of pytest-asyncio-0.20.3 is using attr for version.

> version = attr: pytest_asyncio.__version__

https://github.com/pytest-dev/pytest-asyncio/blob/v0.20.3/setup.cfg#L3

So, setuptools tries to load pytest_asyncio.
It imports pytest. But, it fails to load pytest because pytest isn't installed yet.

> import pytest
https://github.com/pytest-dev/pytest-asyncio/blob/v0.20.3/pytest_asyncio/plugin.py#L27

On Linux, however, setuptools doen't try to load pytest_asyncio because it already knows version.
https://github.com/pypa/setuptools/blob/v56.0.0/setuptools/config.py#L213-L214

This is a test program.

> import setuptools
> print(setuptools.__version__)
> dist = setuptools.Distribution()
> print(dist.metadata.version)

Use WebKit's autoinstalled setuptools:

> export PYTHONPATH=/webkit/Tools/Scripts/libraries/autoinstalled/python-3-x86_64

Unpack pytest-asyncio-0.20.3.tar.gz, and place the test program in the top directory that has setup.cfg.
And, invoke 'python test.py'

With Windows Python, it doesn't know the dist.metadata.version.

> 56.0.0
> None

With Linux Python, it knows the dist.metadata.version.

> 56.0.0
> 0.20.3

I don't know the reason of this difference.
Comment 2 Fujii Hironori 2023-03-06 19:53:17 PST
Pull request: https://github.com/WebKit/WebKit/pull/11150
Comment 3 EWS 2023-03-07 12:55:56 PST
Committed 261341@main (8fd5bfebd3eb): <https://commits.webkit.org/261341@main>

Reviewed commits have been landed. Closing PR #11150 and removing active labels.
Comment 4 Radar WebKit Bug Importer 2023-03-07 12:56:16 PST
<rdar://problem/106375444>