duckdb.experimental.spark fails to import without typing_extensions, which is not a runtime dependency
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 82/100
Piste de recherche
Les trois importations défectueuses se trouvent dans duckdb/experimental/spark/_globals.py:36, duckdb/experimental/spark/sql/types.py:14 et duckdb/experimental/spark/_typing.py:22. Commence par reproduire le problème dans un venv propre contenant uniquement duckdb et numpy, puis importe duckdb.experimental.spark.sql. Compare avec duckdb/polars_io.py pour le motif de garde existant. C'est terminé lorsque ces modules s'importent avec uniquement le module typing de la bibliothèque standard et que l'import spark réussit sans typing_extensions installé.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
What happens?
duckdb.experimental.spark imports typing_extensions at module import time, but typing-extensions is only listed in the stubdeps and test dependency groups in pyproject.toml, not as a runtime dependency and not in the all extra. In a clean environment with just duckdb and numpy (the dependency the all extra comment names for the spark module), importing the spark API fails.
The three imports are:
duckdb/experimental/spark/_globals.py:36—from typing_extensions import Selfduckdb/experimental/spark/sql/types.py:14—from typing_extensions import Selfduckdb/experimental/spark/_typing.py:22—from typing_extensions import Protocol, Self
Since the package requires Python >= 3.11, typing.Self and typing.Protocol are available from the standard library, so these can simply be from typing import Self / from typing import Protocol, Self. duckdb/polars_io.py and duckdb/experimental/spark/sql/_typing.py already guard their typing_extensions usage. The failure is masked when duckdb[all] is installed because typing_extensions arrives transitively through pandas/pyarrow.
Happy to send a PR if the from typing import ... change is the preferred fix.
To Reproduce
python -m venv v && . v/bin/activate
pip install --pre duckdb numpy
python -c "from duckdb.experimental.spark.sql import SparkSession"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File ".../site-packages/duckdb/experimental/spark/__init__.py", line ...
File ".../site-packages/duckdb/experimental/spark/_globals.py", line 36, in <module>
from typing_extensions import Self
ModuleNotFoundError: No module named 'typing_extensions'
Same result on the 1.5.6 release.
OS:
macOS 15 (aarch64)
DuckDB Package Version:
2.0.0.dev2610011535 (nightly); also 1.5.6
Python Version:
3.12
Full Name:
Joaquin Hui Gomez
Affiliation:
Independent contributor
What is the latest build you tested with? If possible, we recommend testing with the latest nightly build.
I have tested with a nightly build
Did you include all relevant data sets for reproducing the issue?
Not applicable - the reproduction does not require a data set
Did you include all code required to reproduce the issue?
- Yes, I have
Did you include all relevant configuration (e.g., CPU architecture, Python version, Linux distribution) to reproduce the issue?
- Yes, I have
- Langage dominant
- Python
- Étoiles
- 191
- Forks
- 120
- Merge moyen
- 14 h 1 min
- PR mergées (30 j)
- 23
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de duckdb/duckdb-python
-
Type stubs omit the `connection` keyword on module-level `read_json` and `write_csv`Peut-être pris @tojacob03 l’a pris il y a 16 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 90/100
duckdb/duckdb-python#627 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
`read_json` accepts a list of paths at runtime but the type stub only allows a single path.Peut-être pris @aleks-drozy l’a pris il y a 74 jours. Ouverteneeds triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
duckdb/duckdb-python#576 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Possible reference leak of the argument tuple in `FunctionCall()`Peut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverteneeds triage
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
duckdb/duckdb-python#534 ·
Les mainteneurs répondent en général sous 1 jour
-
Missing ROW_GROUPS_PER_FILE argument in write_parquet functionPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverteneeds triage
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
duckdb/duckdb-python#386 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 30/100
duckdb/duckdb-python#667 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de duckdb/duckdb-python
Issues similaires
-
mermaid_extract.py silently discards single-line state-diagram notes; sequence notes are keptOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
cathrynlavery/diagram-design#441 ·
Les mainteneurs répondent en général sous 2 jours
-
[Cleanup] Include the public header in work_split.cppPeut-être pris @blozano-tt l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
tenstorrent/tt-metal#60850 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
backend::sglang bug language::python observability
Difficulté 2/5 Une demi-journée Accessibilité débutants 65/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 75/100
OpenShot/openshot-qt#6202 ·
Les mainteneurs répondent en général sous 1 jour