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

"ImportError: cannot import name 'StarletteIntegration' from 'sentry_sdk.integrations.starlette'" after sentry version update #1603

Closed
pravindahal opened this issue Sep 6, 2022 · 9 comments · Fixed by #1868
Assignees
Labels

Comments

@pravindahal
Copy link

pravindahal commented Sep 6, 2022

How do you use Sentry?

Sentry Saas (sentry.io)

Version

1.9.7

Steps to Reproduce

It only happens every once in a while so it is not easy to reproduce.

Here is my sentry.py (see exception trace below):

import functools
import inspect
import os
from typing import Callable

import sentry_sdk

from archimedes_data_fetcher.config import config


def initialize():
    """Initializes sentry"""
    sentry_sdk.init(
        config.get("SENTRY_DSN"),
        environment=config.get("ENVIRONMENT"),
    )
...
...
...

Here is the output of pip list on the failing container:

Package                 Version
----------------------- ---------
affine                  2.3.1
archimedes-data-fetcher 0.5.19
archimedes-flow-utils   1.0.2
attrs                   22.1.0
azure-core              1.25.1
azure-storage-blob      12.13.1
cachetools              5.2.0
certifi                 2022.6.15
cffi                    1.15.1
cftime                  1.6.1
charset-normalizer      2.1.1
click                   8.1.3
click-plugins           1.1.1
cligj                   0.7.2
cloudpickle             2.1.0
croniter                1.3.5
cryptography            37.0.4
dask                    2022.8.1
datadog                 0.44.0
datadog-api-client      2.3.0
distributed             2022.8.1
docker                  6.0.0
fsspec                  2022.8.2
gitdb                   4.0.9
GitPython               3.1.27
HeapDict                1.0.1
idna                    3.3
importlib-resources     5.9.0
investpy                1.0.8
isodate                 0.6.1
Jinja2                  3.1.2
locket                  1.0.0
lxml                    4.9.1
MarkupSafe              2.1.1
marshmallow             3.17.1
marshmallow-oneofschema 3.0.1
minio                   7.1.11
msgpack                 1.0.4
msrest                  0.7.1
mypy-extensions         0.4.3
netCDF4                 1.6.0
numpy                   1.23.2
oauthlib                3.2.0
packaging               21.3
pandas                  1.4.4
partd                   1.3.0
pendulum                2.1.2
pip                     22.2.2
prefect                 1.3.0
psutil                  5.9.1
psycopg                 3.1
pycparser               2.21
pyparsing               3.0.9
pyproj                  3.3.1
python-box              6.0.2
python-dateutil         2.8.2
python-dotenv           0.20.0
python-slugify          6.1.2
pytz                    2022.2.1
pytzdata                2020.1
PyYAML                  6.0
rasterio                1.3.2
requests                2.28.1
requests-oauthlib       1.3.1
rioxarray               0.10.3
sentry-sdk              1.9.7
setuptools              65.3.0
six                     1.16.0
smmap                   5.0.0
snuggs                  1.4.7
sortedcontainers        2.4.0
tabulate                0.8.10
tblib                   1.7.0
text-unidecode          1.3
toml                    0.10.2
toolz                   0.12.0
tornado                 6.1
typing_extensions       4.3.0
Unidecode               1.3.4
urllib3                 1.26.12
websocket-client        1.4.0
wheel                   0.37.1
xarray                  2022.6.0
zict                    2.2.0
zipp                    3.8.1

This has not happened when I pin sentry-sdk version to 1.9.5, so I think it must have been introduced in either 1.9.6 or 1.9.7.

Expected Result

No crash on sentry initialization.

Actual Result

Task 'store[1]': Exception encountered during task execution!
Traceback (most recent call last):
  File "/app/.venv/lib/python3.9/site-packages/prefect/engine/task_runner.py", line 880, in get_task_run_state
    value = prefect.utilities.executors.run_task_with_timeout(
  File "/app/.venv/lib/python3.9/site-packages/prefect/utilities/executors.py", line 468, in run_task_with_timeout
    return task.run(*args, **kwargs)  # type: ignore
  File "/home/runner/work/archimedes-data-fetcher/archimedes-data-fetcher/archimedes_data_fetcher/sentry.py", line 36, in wrapper
  File "/app/archimedes_data_fetcher/sentry.py", line 13, in initialize
    sentry_sdk.init(
  File "/app/.venv/lib/python3.9/site-packages/sentry_sdk/hub.py", line 119, in _init
    client = Client(*args, **kwargs)  # type: ignore
  File "/app/.venv/lib/python3.9/site-packages/sentry_sdk/client.py", line 89, in __init__
    self._init_impl()
  File "/app/.venv/lib/python3.9/site-packages/sentry_sdk/client.py", line 123, in _init_impl
    self.integrations = setup_integrations(
  File "/app/.venv/lib/python3.9/site-packages/sentry_sdk/integrations/__init__.py", line 109, in setup_integrations
    for integration_cls in iter_default_integrations(
  File "/app/.venv/lib/python3.9/site-packages/sentry_sdk/integrations/__init__.py", line 41, in iter_default_integrations
    yield getattr(import_module(module), cls)
  File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/app/.venv/lib/python3.9/site-packages/sentry_sdk/integrations/fastapi.py", line 4, in <module>
    from sentry_sdk.integrations.starlette import (
ImportError: cannot import name 'StarletteIntegration' from 'sentry_sdk.integrations.starlette' (/app/.venv/lib/python3.9/site-packages/sentry_sdk/integrations/starlette.py)
@antonpirker
Copy link
Member

From what I see everything looks good and it should work. The file that StarletteIntegration is try to import from is there and StarletteIntegration is also in there.

From the /app path in your stack traces, I guess you are in a Docker container. Is the Python code outside the Docker container, maybe some syncing between the docker host and the docker container is not working? (This happened to me once and had something to do with the IDE was watching the python files for changes and also Docker is watching the synced directory with the same files for changes and something then broke)

Hope this helps solving your problem!

@antonpirker antonpirker added Type: Bug Something isn't working Hacktoberfest 🎃 Issues eligible for Hacktoberfest! and removed Hacktoberfest 🎃 Issues eligible for Hacktoberfest! labels Sep 30, 2022
@barnybug
Copy link

barnybug commented Oct 19, 2022

We're seeing this issue too, in a project that uses neither fastapi or starlette.

My theory is it's due to the order the auto enabling integrations runs:
"sentry_sdk.integrations.starlette.StarletteIntegration",
"sentry_sdk.integrations.fastapi.FastApiIntegration",

It tries StarletteIntegration, which raises DidNotEnable, but as a side-effect that module is defined, but empty.
Then it tries FastApiIntegration, which tries to import from the empty sentry_sdk.integrations.starlette and gets the error above.

For now, we've switched off the auto enabling integrations to workaround.

@pravindahal
Copy link
Author

This issue still exists as of version 1.10.1.

@github-actions
Copy link

github-actions bot commented Dec 2, 2022

This issue has gone three weeks without activity. In another week, I will close it.

But! If you comment or otherwise update it, I will reset the clock, and if you label it Status: Backlog or Status: In Progress, I will leave it alone ... forever!


"A weed is but an unloved flower." ― Ella Wheeler Wilcox 🥀

@github-actions github-actions bot closed this as not planned Won't fix, can't repro, duplicate, stale Dec 9, 2022
@caiolopes
Copy link

caiolopes commented Dec 16, 2022

Hi there

We specifically set our integrations to be:

integrations=[
    sentry_sdk.integrations.celery.CeleryIntegration(),
    sentry_sdk.integrations.flask.FlaskIntegration(),
    sentry_sdk.integrations.sqlalchemy.SqlalchemyIntegration(),
]

But we keep getting the error:

cannot import name 'StarletteIntegration' from 'sentry_sdk.integrations.starlette' (/usr/local/lib/python3.7/site-packages/sentry_sdk/integrations/starlette.py)

This started after we bumped from Sentry SDK 0.20.3 to 1.11.1

@pravindahal
Copy link
Author

pravindahal commented Dec 19, 2022

@antonpirker No indication that this has been resolved. I will double-check and post an update... could you please re-open for now?

@pravindahal
Copy link
Author

Confirming that this issue still exists with version 1.12.1.

@pravindahal
Copy link
Author

pravindahal commented Dec 29, 2022

If this doesn't get reopened and if someone else finds this, I did the same as one of the users has mentioned above which is to disable auto-enabling integrations as a workaround:

    sentry_sdk.init(
        ...
        ...
        auto_enabling_integrations=False,
        ...
        ...
    )

@sl0thentr0py sl0thentr0py reopened this Jan 3, 2023
@sl0thentr0py
Copy link
Member

@antonpirker this is not resolved so re-opening, please take a look once you're back

@antonpirker antonpirker self-assigned this Jan 26, 2023
antonpirker added a commit that referenced this issue Jan 30, 2023
When loading FastAPI integration also check if StarletteIntegration can actually be loaded. (Because Starlette is a requirement for FastAPI)

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

Successfully merging a pull request may close this issue.

5 participants