Skip to content

Make it possible to use local stubs #25

Closed

Description

@JukkaL

Currently the stubs are only searched automatically from the directory stubs below the directory containing (the translated) mypy.py. It would be useful to also look for stubs in a directory relative to the program being type checked/run.

For example, consider the following hierarchy:

d/foo.py
d/stubs/mylib.py

Now if d/foo.py does import mylib, it should refer to the mylib.py file in the stubs directory under d. stubs is a magic directory name for stubs.

Activity

  1. ashleyh commented on Dec 13, 2012

    @ashleyh
    Contributor

    I wonder if it would be better to be able to specify additional stubs dirs as a command line argument or something...

  2. JukkaL commented on Dec 13, 2012

    @JukkaL
    CollaboratorAuthor

    You can specify an additional module path (for looking up stubs or any modules) by using the MYPYPATH environment variable. The implicit 'stubs' directory would just be a convenience.

  3. JukkaL commented on Dec 8, 2014

    @JukkaL
    CollaboratorAuthor

    As we now have an alternative extension for stubs, this is no longer as urgent: #345

  4. JukkaL commented on May 17, 2015

    @JukkaL
    CollaboratorAuthor

    The .pyi extension seems to address this issue, so closing this now.

  5. DionysusG commented on May 31, 2016

    @DionysusG

    Hi,

    This might be a stupid question, but I have tried the both methods to use a local stub: putting the pyi file in the same directory as the py file to run and exporting MYPMPATH to a stub directory and put the pyi file there. I named both pyi file the same name as the py file except for the extension. However, both situations does not throw an error when I run a test program with the incorrect typing hint.

    Is there some new way to use the new local stub or I was just stupid and misunderstand the instruction?

  6. gvanrossum commented on May 31, 2016

    @gvanrossum
    Member
  7. Kamforka commented on Jul 12, 2019

    @Kamforka

    So as a follow up I also can't seem to sort out the problems with local stub files.

    I have the following project structure:

    stub-typing/
    ├── stubtyping/
    │   ├── __init__.py
    │   ├── main.py
    │   └── main.pyi
    └── venv/
    

    main.py has the following content:

    def add(a, b):
        return a + b
    
    
    add(1, 2)
    add('a', 'b')

    and main.pyi has:

    def add(a: int, b: int) -> int: ...

    When MYPYPATH is unset and I execute mypy stubtyping/ I have a blank output instead of the expected:

    main.py:6: error: Argument 1 to "add" has incompatible type "str"; expected "int"
    main.py:6: error: Argument 2 to "add" has incompatible type "str"; expected "int"
    

    I also tried to setMYPYPATH to stubtyping/ but I still get the same results.

    What am I missing?

  8. gvanrossum commented on Jul 12, 2019

    @gvanrossum
    Member

    Next time please use the Gitter channel (see project README).

    The answer is that mypy ignores main.py because it finds main.pyi in the same directory. This is by design. If you want type annotations, put then in main.py and get rid of main.pyi.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions