python / python/mypy

Can't check only submodules (except if installed with `pip install -e .`)

Aperta
#15,655 1 commento 3 reazioni 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

Bug Report

Checking a submodule only of a project seems impossible, when not installed using pip install -e .

Usecase:
I have project that contains auto-generated API code which is not correctly typed.
I only want to check the controllers that are located in a submodule.

To Reproduce

  1. Create a example project with the following structure
.
├── setup.py
└──src
    └── example_project
        ├── __init__.py
        ├── calc.py
        ├── py.typed
        └── sub
            ├── __init__.py
            └── foo.py

src/example_project/calc.py :

def int_add(a: int, b: int) -> int:
    """
    Simply add two numbers
    """
    return a + b


def float_diff(a: float, b: float) -> float:
    """
    Diff two numbers
    """
    return a / b


if __name__ == "__main__":
    int_add("a", "b")

src/ems_example_project/sub/foo.py:

import example_project.calc

example_project.calc.int_add("foo", "bar")

a: int = 1
a = "2"
  1. Install the package with pip install . OR do not install it at all.

  2. Run mypy for the given submodule

mypy src/example_project/sub

Expected Behavior

Only type errors for the submodule are found:

src/example_project/sub/foo.py:3: error: Argument 1 to "int_add" has incompatible type "str"; expected "int"  [arg-type]
src/example_project/sub/foo.py:3: error: Argument 2 to "int_add" has incompatible type "str"; expected "int"  [arg-type]
src/example_project/sub/foo.py:6: error: Incompatible types in assignment (expression has type "str", variable has type "int")  [assignment]
Found 3 errors in 1 file (checked 2 source files)

This actually works, if I install the package with pip install -e ..
But I expect this to work no matter if I install the package normally or not installing it at all.

Actual Behavior

The type errors for the top level modules are also listed.

src/example_project/calc.py:21: error: Argument 1 to "int_add" has incompatible type "str"; expected "int"  [arg-type]
src/example_project/calc.py:21: error: Argument 2 to "int_add" has incompatible type "str"; expected "int"  [arg-type]
src/example_project/sub/foo.py:3: error: Argument 1 to "int_add" has incompatible type "str"; expected "int"  [arg-type]
src/example_project/sub/foo.py:3: error: Argument 2 to "int_add" has incompatible type "str"; expected "int"  [arg-type]
src/example_project/sub/foo.py:6: error: Incompatible types in assignment (expression has type "str", variable has type "int")  [assignment]
Found 5 errors in 2 files (checked 2 source files)

If I use the option -p example_project.sub instead of the path it works as expected. But in my environment I am only able to add specific files (think pre-commit or similar).
It also works if I install the package using pip install -e.
Still I would not expect a such a difference just depending on how I installed the package.

Your Environment

  • Mypy version used: 1.4.1
  • Mypy command-line flags: none besides the path to the file
  • Mypy configuration options from mypy.ini (and other config files): none
  • Python version used: 3.9.16

This might be related to:

  • #10956
  • #10260
  • #6861
  • #10428

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

Inizia con la struttura segnalata di setup.py e riproduci la differenza tra mypy src/example_project/sub, -p example_project.sub e un’installazione editable rispetto a una normale. Confronta le diagnosi di calc.py e sub/foo.py, quindi traccia il comportamento di individuazione dei moduli basato sui percorsi. Il lavoro è completato quando il controllo del solo sottomodulo richiesto produce i tre errori previsti senza controllare anche calc.py.

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
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.