Fix checking if a package is installed on py3.11 (#88768)
pkg_resources is abandoned and we need to move away from using it https://github.com/pypa/pkg_resources In the mean time we need to keep it working. This fixes a new exception in py3.11 when a module is not installed which allows proper fallback to pkg_resources.Requirement.parse when needed ``` 2023-02-25 15:46:21.101 ERROR (MainThread) [aiohttp.server] Error handling request Traceback (most recent call last): File "/opt/homebrew/lib/python3.11/site-packages/aiohttp/web_protocol.py", line 433, in _handle_request resp = await request_handler(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/aiohttp/web_app.py", line 504, in _handle resp = await handler(request) ^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/aiohttp/web_middlewares.py", line 117, in impl return await handler(request) ^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/components/http/security_filter.py", line 60, in security_filter_middleware return await handler(request) ^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/components/http/forwarded.py", line 100, in forwarded_middleware return await handler(request) ^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/components/http/request_context.py", line 28, in request_context_middleware return await handler(request) ^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/components/http/ban.py", line 80, in ban_middleware return await handler(request) ^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/components/http/auth.py", line 235, in auth_middleware return await handler(request) ^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/components/http/view.py", line 146, in handle result = await result ^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/components/config/config_entries.py", line 148, in post return await super().post(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/components/http/data_validator.py", line 72, in wrapper result = await method(view, request, data, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/helpers/data_entry_flow.py", line 71, in post result = await self._flow_mgr.async_init( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/config_entries.py", line 826, in async_init flow, result = await task ^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/config_entries.py", line 844, in _async_init flow = await self.async_create_flow(handler, context=context, data=data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/config_entries.py", line 950, in async_create_flow await async_process_deps_reqs(self.hass, self._hass_config, integration) File "/Users/bdraco/home-assistant/homeassistant/setup.py", line 384, in async_process_deps_reqs await requirements.async_get_integration_with_requirements( File "/Users/bdraco/home-assistant/homeassistant/requirements.py", line 52, in async_get_integration_with_requirements return await manager.async_get_integration_with_requirements(domain) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/requirements.py", line 171, in async_get_integration_with_requirements await self._async_process_integration(integration, done) File "/Users/bdraco/home-assistant/homeassistant/requirements.py", line 186, in _async_process_integration await self.async_process_requirements( File "/Users/bdraco/home-assistant/homeassistant/requirements.py", line 252, in async_process_requirements await self._async_process_requirements(name, missing) File "/Users/bdraco/home-assistant/homeassistant/requirements.py", line 284, in _async_process_requirements installed, failures = await self.hass.async_add_executor_job( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/Cellar/python@3.11/3.11.1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/requirements.py", line 113, in _install_requirements_if_missing if pkg_util.is_installed(req) or _install_with_retry(req, kwargs): ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bdraco/home-assistant/homeassistant/util/package.py", line 40, in is_installed pkg_resources.get_distribution(package) File "/opt/homebrew/lib/python3.11/site-packages/pkg_resources/__init__.py", line 478, in get_distribution dist = get_provider(dist) ^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/pkg_resources/__init__.py", line 354, in get_provider return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0] ~~~~~~~~~~~~~~~~~~~~~~~~~^^^ IndexError: list index out of range ``pull/88778/head
parent
b4a3a663cf
commit
327edabb64
|
@ -39,7 +39,7 @@ def is_installed(package: str) -> bool:
|
|||
try:
|
||||
pkg_resources.get_distribution(package)
|
||||
return True
|
||||
except (pkg_resources.ResolutionError, pkg_resources.ExtractionError):
|
||||
except (IndexError, pkg_resources.ResolutionError, pkg_resources.ExtractionError):
|
||||
req = pkg_resources.Requirement.parse(package)
|
||||
except ValueError:
|
||||
# This is a zip file. We no longer use this in Home Assistant,
|
||||
|
|
Loading…
Reference in New Issue