Can't check only submodules (except if installed with `pip install -e .`)
还没有人认领这个 Issue。
- 主要语言
- Python
- 星标
- 20.6k
- 派生
- 3.3k
- PR 合并指标
- PR 指标待抓取
描述
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
- 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"
-
Install the package with
pip install .OR do not install it at all. -
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
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从报告中的 setup.py 布局开始,复现 mypy src/example_project/sub、-p example_project.sub 以及 editable 安装与普通安装之间的差异。比较 calc.py 和 sub/foo.py 的诊断结果,然后跟踪基于路径的模块发现行为。完成标准是:仅检查请求的子模块时产生预期的三个错误,同时不检查 calc.py。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- python
- 领域
- devtools
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100