python / python/mypy

Namespace packages and __init__ imports

Aperta
#9,716 2 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

--namespace-packages runs into an issue if we import from __init__.py explicitly.

For instance, given:

.
└── proj
    ├── __init__.py
    └── a.py

$ cat proj/__init__.py 
x: int

$ cat proj/a.py       
from .__init__ import x

$ cat proj/b.py
from proj.__init__ import x

running mypy will result in:

$ mypy proj --namespace-packages
proj/__init__.py: error: Source file found twice under different module names: 'proj' and 'proj.__init__'

This issue comes up at least twice in mypy_primer's corpus.

This is correct in that you do get two entries in sys.modules, but undesirable for this to block type checking

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci l'errore con i file proj/init.py, proj/a.py e proj/b.py mostrati usando mypy proj --namespace-packages. Inizia tracciando la ricerca dei moduli dei namespace package e il modo in cui vengono registrati gli import espliciti di __init__. Il lavoro è completo quando questo esempio non segnala più l'errore di file sorgente duplicato e continua comunque a verificare i tipi degli import.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
devtools
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
42/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.