我一生都无法让 MyPy 找到不与其源代码共存的存根。这是我的项目结构:
trymypy/
|- stubs/
| \- foo.pyi
|- __init__.py
|- usefoo.py
\- foo.py
Run Code Online (Sandbox Code Playgroud)
trymypy/
|- stubs/
| \- foo.pyi
|- __init__.py
|- usefoo.py
\- foo.py
Run Code Online (Sandbox Code Playgroud)
# foo.py
def foofunc(x):
return str(x)
Run Code Online (Sandbox Code Playgroud)
# usefoo.py
from trymypy.foo import foofunc
print(foofunc(5) + 5)
Run Code Online (Sandbox Code Playgroud)
我已将MYPYPATH环境变量设置为/full/path/to/trymypy/stubs,以便 MyPy 应该在stubs目录中查找我的.pyi文件。
这不应该通过类型检查。MyPy 应该将错误标记为:
../trymypy/usefoo.py:3: error: Unsupported operand types for + ("str" and "int")
Run Code Online (Sandbox Code Playgroud)
相反,MyPy 不会标记任何错误,因为它没有读取存根文件。如果我将存根文件移动foo.pyi到目录的根项目中,并与 位于同一位置foo.py,它会正确标记,这向我表明MYPYPATH没有被拾取,或者没有被正确定义。
我也试过mypy_path在配置文件中设置mypy.ini:
[mypy] …Run Code Online (Sandbox Code Playgroud)