DataDog / dd-trace-py

Datadog Python APM Client
https://ddtrace.readthedocs.io/
Other
536 stars 408 forks source link

TypeError: operation `LOAD_ATTR` argument must be a str, got a tuple #8566

Closed IAL32 closed 5 months ago

IAL32 commented 6 months ago

Summary of problem

Getting the following error when starting up ddtrace-run:

`error` ``` fastapi-1 | error configuring Datadog tracing fastapi-1 | Traceback (most recent call last): fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/bootstrap/sitecustomize.py", line 116, in fastapi-1 | import ddtrace.bootstrap.preload as preload # Perform the actual initialisation fastapi-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ fastapi-1 | File "", line 1360, in _find_and_load fastapi-1 | File "", line 1331, in _find_and_load_unlocked fastapi-1 | File "", line 935, in _load_unlocked fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/module.py", line 208, in _exec_module fastapi-1 | self.loader.exec_module(module) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/bootstrap/preload.py", line 8, in fastapi-1 | from ddtrace.debugging._config import di_config # noqa:F401 fastapi-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ fastapi-1 | File "", line 1360, in _find_and_load fastapi-1 | File "", line 1331, in _find_and_load_unlocked fastapi-1 | File "", line 935, in _load_unlocked fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/module.py", line 208, in _exec_module fastapi-1 | self.loader.exec_module(module) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/debugging/__init__.py", line 31, in fastapi-1 | from ddtrace.debugging._debugger import Debugger as DynamicInstrumentation fastapi-1 | File "", line 1360, in _find_and_load fastapi-1 | File "", line 1331, in _find_and_load_unlocked fastapi-1 | File "", line 935, in _load_unlocked fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/module.py", line 208, in _exec_module fastapi-1 | self.loader.exec_module(module) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/debugging/_debugger.py", line 31, in fastapi-1 | from ddtrace.debugging._function.store import FullyNamedWrappedFunction fastapi-1 | File "", line 1360, in _find_and_load fastapi-1 | File "", line 1331, in _find_and_load_unlocked fastapi-1 | File "", line 935, in _load_unlocked fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/module.py", line 208, in _exec_module fastapi-1 | self.loader.exec_module(module) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/debugging/_function/store.py", line 16, in fastapi-1 | from ddtrace.internal.wrapping import WrappedFunction fastapi-1 | File "", line 1360, in _find_and_load fastapi-1 | File "", line 1331, in _find_and_load_unlocked fastapi-1 | File "", line 935, in _load_unlocked fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/module.py", line 208, in _exec_module fastapi-1 | self.loader.exec_module(module) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/wrapping/__init__.py", line 20, in fastapi-1 | from ddtrace.internal.wrapping.asyncs import wrap_async fastapi-1 | File "", line 1360, in _find_and_load fastapi-1 | File "", line 1331, in _find_and_load_unlocked fastapi-1 | File "", line 935, in _load_unlocked fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/module.py", line 208, in _exec_module fastapi-1 | self.loader.exec_module(module) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/wrapping/asyncs.py", line 57, in fastapi-1 | ASYNC_GEN_ASSEMBLY.parse( fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/assembly.py", line 229, in parse fastapi-1 | entry = self.parse_line(line) fastapi-1 | ^^^^^^^^^^^^^^^^^^^^^ fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/assembly.py", line 210, in parse_line fastapi-1 | or self.parse_instruction(line) fastapi-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/assembly.py", line 200, in parse_instruction fastapi-1 | return bc.Instr( fastapi-1 | ^^^^^^^^^ fastapi-1 | File "/usr/local/lib/python3.12/site-packages/bytecode/instr.py", line 447, in __init__ fastapi-1 | self._set(name, arg) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/bytecode/instr.py", line 644, in _set fastapi-1 | self._check_arg(name, opcode, arg) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/bytecode/instr.py", line 719, in _check_arg fastapi-1 | raise TypeError( fastapi-1 | TypeError: operation LOAD_ATTR argument must be a str, got tuple fastapi-1 | error configuring Datadog tracing fastapi-1 | Traceback (most recent call last): fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/bootstrap/sitecustomize.py", line 116, in fastapi-1 | import ddtrace.bootstrap.preload as preload # Perform the actual initialisation fastapi-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ fastapi-1 | File "", line 1360, in _find_and_load fastapi-1 | File "", line 1331, in _find_and_load_unlocked fastapi-1 | File "", line 935, in _load_unlocked fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/module.py", line 208, in _exec_module fastapi-1 | self.loader.exec_module(module) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/bootstrap/preload.py", line 8, in fastapi-1 | from ddtrace.debugging._config import di_config # noqa:F401 fastapi-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ fastapi-1 | File "", line 1360, in _find_and_load fastapi-1 | File "", line 1331, in _find_and_load_unlocked fastapi-1 | File "", line 935, in _load_unlocked fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/module.py", line 208, in _exec_module fastapi-1 | self.loader.exec_module(module) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/debugging/__init__.py", line 31, in fastapi-1 | from ddtrace.debugging._debugger import Debugger as DynamicInstrumentation fastapi-1 | File "", line 1360, in _find_and_load fastapi-1 | File "", line 1331, in _find_and_load_unlocked fastapi-1 | File "", line 935, in _load_unlocked fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/module.py", line 208, in _exec_module fastapi-1 | self.loader.exec_module(module) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/debugging/_debugger.py", line 31, in fastapi-1 | from ddtrace.debugging._function.store import FullyNamedWrappedFunction fastapi-1 | File "", line 1360, in _find_and_load fastapi-1 | File "", line 1331, in _find_and_load_unlocked fastapi-1 | File "", line 935, in _load_unlocked fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/module.py", line 208, in _exec_module fastapi-1 | self.loader.exec_module(module) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/debugging/_function/store.py", line 16, in fastapi-1 | from ddtrace.internal.wrapping import WrappedFunction fastapi-1 | File "", line 1360, in _find_and_load fastapi-1 | File "", line 1331, in _find_and_load_unlocked fastapi-1 | File "", line 935, in _load_unlocked fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/module.py", line 208, in _exec_module fastapi-1 | self.loader.exec_module(module) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/wrapping/__init__.py", line 20, in fastapi-1 | from ddtrace.internal.wrapping.asyncs import wrap_async fastapi-1 | File "", line 1360, in _find_and_load fastapi-1 | File "", line 1331, in _find_and_load_unlocked fastapi-1 | File "", line 935, in _load_unlocked fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/module.py", line 208, in _exec_module fastapi-1 | self.loader.exec_module(module) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/wrapping/asyncs.py", line 57, in fastapi-1 | ASYNC_GEN_ASSEMBLY.parse( fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/assembly.py", line 229, in parse fastapi-1 | entry = self.parse_line(line) fastapi-1 | ^^^^^^^^^^^^^^^^^^^^^ fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/assembly.py", line 210, in parse_line fastapi-1 | or self.parse_instruction(line) fastapi-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ fastapi-1 | File "/usr/local/lib/python3.12/site-packages/ddtrace/internal/assembly.py", line 200, in parse_instruction fastapi-1 | return bc.Instr( fastapi-1 | ^^^^^^^^^ fastapi-1 | File "/usr/local/lib/python3.12/site-packages/bytecode/instr.py", line 447, in __init__ fastapi-1 | self._set(name, arg) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/bytecode/instr.py", line 644, in _set fastapi-1 | self._check_arg(name, opcode, arg) fastapi-1 | File "/usr/local/lib/python3.12/site-packages/bytecode/instr.py", line 719, in _check_arg fastapi-1 | raise TypeError( fastapi-1 | TypeError: operation LOAD_ATTR argument must be a str, got tuple ```

Which version of dd-trace-py are you using?

ddtrace==2.6.5

Which version of pip are you using?

$ pip --version
pip 24.0 from /usr/local/lib/python3.12/site-packages/pip (python 3.12)

Which libraries and their versions are you using?

`pip freeze` ``` aiofiles==23.2.1 aiohttp==3.9.3 aioresponses==0.7.6 aiosignal==1.3.1 aiosmtplib==2.0.2 alembic==1.13.1 alembic_utils==0.8.2 amqp==5.1.1 anyio==3.7.1 apache-libcloud==3.8.0 asgiref==3.7.2 asttokens==2.2.1 asyncio==3.4.3 attrs==23.1.0 auth0-python==4.7.1 azure-core==1.30.0 azure-storage-blob==12.19.0 backoff==2.2.1 billiard==4.2.0 blinker==1.7.0 bytecode==0.14.2 camel-converter==3.0.0 cattrs==23.1.2 celery==5.3.6 celery-batches==0.8.1 celery-redbeat==2.2.0 certifi==2023.7.22 cffi==1.15.1 charset-normalizer==3.1.0 click==8.1.7 click-didyoumean==0.3.0 click-plugins==1.1.1 click-repl==0.3.0 coverage==7.3.2 cryptography==42.0.5 ddsketch==2.0.4 ddtrace==2.6.5 Deprecated==1.2.14 devtools==0.12.2 dnspython==2.3.0 email-validator==1.3.1 envier==0.4.0 executing==1.2.0 expiringdict==1.2.2 factory-boy==3.3.0 Faker==23.3.0 faker-enum==0.0.2 fancycompleter==0.9.1 fastapi==0.110.0 fastapi-debug-toolbar==0.4.0 fastapi-mail==1.2.8 flupy==1.2.0 freezegun==1.4.0 frozenlist==1.4.1 gelidum==0.7.0 greenlet==3.0.3 h11==0.14.0 httpcore==1.0.2 httpx==0.27.0 idna==3.4 importlib-metadata==7.0.1 inflection==0.5.1 iniconfig==2.0.0 isodate==0.6.1 Jinja2==3.1.3 kombu==5.3.4 launchdarkly-eventsource==1.1.0 launchdarkly-server-sdk==9.2.0 Mako==1.2.4 MarkupSafe==2.1.3 meilisearch==0.30.0 msal==1.27.0 multidict==6.0.4 opentelemetry-api==1.16.0 packaging==23.1 parse==1.19.1 pdbpp==0.10.3 pluggy==1.4.0 prompt-toolkit==3.0.38 protobuf==4.23.3 psutil==5.9.8 psycopg2==2.9.9 pycountry==23.12.11 pycparser==2.21 pycryptodome==3.20.0 pydantic==1.10.14 Pygments==2.15.1 pyinstrument==4.5.0 PyJWT==2.8.0 pyrepl==0.9.0 pyRFC3339==1.1 pytest==8.0.2 pytest-asyncio==0.23.5 pytest-cov==4.1.0 pytest-factoryboy==2.6.0 pytest-mock==3.12.0 pytest-random-order==1.1.1 pytest-split==0.8.2 python-dateutil==2.8.2 python-dotenv==1.0.0 python-multipart==0.0.9 pytz==2023.3.post1 redis==4.5.4 remote-pdb==2.1.0 requests==2.31.0 requests-mock==1.11.0 segment-analytics-python==2.3.2 semver==2.13.0 sentry-sdk==1.40.6 setuptools==67.8.0 six==1.16.0 sniffio==1.3.0 SQLAlchemy==1.4.51 SQLAlchemy-Utils==0.41.1 sqlparse==0.4.4 starlette==0.36.3 stream-zip==0.0.71 tenacity==8.2.2 typing_extensions==4.8.0 tzdata==2023.3 unicode-slugify==0.1.5 Unidecode==1.3.6 urllib3==2.0.7 uvicorn==0.27.1 vine==5.1.0 watchfiles==0.21.0 wcwidth==0.2.6 wheel==0.42.0 wmctrl==0.4 wrapt==1.15.0 xmltodict==0.13.0 yarl==1.9.2 zipp==3.15.0 ```

How can we reproduce your problem?

On Python 3.12, run ddtrace-run uvicorn app.main:app --host 0.0.0.0 --port 80 --reload or any other application. In our case, we run FastAPI.

What is the result that you get?

Error, no trace can be retrieved by dd agents. This causes all services to go down.

What is the result that you expected?

No error, traces can be retrieved by dd agents

Note: maybe related to https://github.com/DataDog/dd-trace-py/pull/8138

P403n1x87 commented 6 months ago

@IAL32 thanks for reporting this. The pip freeze shows bytecode==0.14.2 which is weird, as the PR you have linked shows that we should have bytecode==0.15.0 installed instead. I think some other dependencies look off too (e.g. envier). Was ddtrace upgraded from a previous version in an existing environment. Starting from a clean environment should fix this.

IAL32 commented 6 months ago

Was ddtrace upgraded from a previous version in an existing environment. Starting from a clean environment should fix this.

Dependabot upgraded ddtrace. I can try and upgrade it manually locally. Will keep you updated.