我有这样的结构:
mypy_minrepro
| mypy.ini
| __init__.py
|
+---test
| | main.py
| | __init__.py
| |
| \---stubs
| \---untyped
| main.pyi
| __init__.pyi
|
\---untyped
main.py
__init__.py有一些简单的文件:
mypy.ini
[mypy]
mypy_path = test/stubsuntyped/main.py
def foo(x):
return x ** 2test/stubs/untyped/main.pyi
def foo(x: float) -> float: ...test/main.py
from untyped.main import foo
if __name__ == "__main__":
foo("invalid") # I want mypy to spot this error using my .pyi file当我从包外部运行时,所以./mypy_minrepro,下面的命令如下:
mypy -m mypy_minrepro.test.main我得到:
mypy_minrepro\test\main.py:8:错误:找不到名为"untyped.main“的模块的实现或库存根
LOG: Mypy Version: 0.910
LOG: Config File: Default
LOG: Configured Executable: C:\Dev\anaconda3\envs\spy\python.exe
LOG: Current Executable: C:\Dev\anaconda3\envs\spy\python.exe
LOG: Cache Dir: .mypy_cache
LOG: Compiled: True
LOG: Exclude:
LOG: Found source: BuildSource(path='C:\\Dev\\Code\\mypy_minrepro\\test\\main.py', module='mypy_minrepro.test.main', has_text=False, base_dir=None)
LOG: Could not load cache for mypy_minrepro.test.main: mypy_minrepro\test\main.meta.json
LOG: Metadata not found for mypy_minrepro.test.main
LOG: Parsing C:\Dev\Code\mypy_minrepro\test\main.py (mypy_minrepro.test.main)
LOG: Metadata fresh for mypy_minrepro.test: file C:\Dev\Code\mypy_minrepro\test\__init__.py
LOG: Metadata fresh for mypy_minrepro: file C:\Dev\Code\mypy_minrepro\__init__.py
LOG: Metadata fresh for builtins: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\builtins.pyi
LOG: Metadata fresh for sys: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\sys.pyi
LOG: Metadata fresh for types: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\types.pyi
LOG: Metadata fresh for _typeshed: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\_typeshed\__init__.pyi
LOG: Metadata fresh for ast: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\ast.pyi
LOG: Metadata fresh for io: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\io.pyi
LOG: Metadata fresh for typing: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\typing.pyi
LOG: Metadata fresh for typing_extensions: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\typing_extensions.pyi
LOG: Metadata fresh for importlib.abc: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\importlib\abc.pyi
LOG: Metadata fresh for importlib.machinery: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\importlib\machinery.pyi
LOG: Metadata fresh for array: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\array.pyi
LOG: Metadata fresh for mmap: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\mmap.pyi
LOG: Metadata fresh for os: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\os\__init__.pyi
LOG: Metadata fresh for _ast: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\_ast.pyi
LOG: Metadata fresh for codecs: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\codecs.pyi
LOG: Metadata fresh for collections: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\collections\__init__.pyi
LOG: Metadata fresh for abc: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\abc.pyi
LOG: Metadata fresh for importlib: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\importlib\__init__.pyi
LOG: Metadata fresh for posix: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\posix.pyi
LOG: Metadata fresh for subprocess: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\subprocess.pyi
LOG: Metadata fresh for os.path: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\os\path.pyi
LOG: Metadata fresh for _collections_abc: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\_collections_abc.pyi
LOG: Metadata fresh for ntpath: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\ntpath.pyi
LOG: Metadata fresh for genericpath: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\genericpath.pyi
LOG: Metadata fresh for posixpath: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\posixpath.pyi
LOG: Loaded graph with 28 nodes (0.084 sec)
LOG: Found 4 SCCs; largest has 25 nodes
LOG: Processing 3 queued fresh SCCs
LOG: Processing SCC singleton (mypy_minrepro.test.main) as inherently stale
mypy_minrepro\test\main.py:8: error: Cannot find implementation or library stub for module named "untyped.main"
mypy_minrepro\test\main.py:8: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
LOG: Deleting mypy_minrepro.test.main C:\Dev\Code\mypy_minrepro\test\main.py mypy_minrepro\test\main.meta.json mypy_minrepro\test\main.data.json
LOG: No fresh SCCs left in queue
LOG: Build finished in 0.199 seconds with 28 modules, and 2 errorsLOG: Mypy Version: 0.910
LOG: Config File: Default
LOG: Configured Executable: C:\Dev\anaconda3\envs\spy\python.exe
LOG: Current Executable: C:\Dev\anaconda3\envs\spy\python.exe
LOG: Cache Dir: .mypy_cache
LOG: Compiled: True
LOG: Exclude:
LOG: Found source: BuildSource(path='C:\\Dev\\Code\\mypy_minrepro\\test\\main.py', module='mypy_minrepro.test.main', has_text=False, base_dir=None)
LOG: Could not load cache for mypy_minrepro.test.main: mypy_minrepro\test\main.meta.json
LOG: Metadata not found for mypy_minrepro.test.main
LOG: Parsing C:\Dev\Code\mypy_minrepro\test\main.py (mypy_minrepro.test.main)
LOG: Metadata fresh for mypy_minrepro.test: file C:\Dev\Code\mypy_minrepro\test\__init__.py
LOG: Metadata fresh for mypy_minrepro: file C:\Dev\Code\mypy_minrepro\__init__.py
LOG: Metadata fresh for builtins: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\builtins.pyi
LOG: Metadata fresh for sys: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\sys.pyi
LOG: Metadata fresh for types: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\types.pyi
LOG: Metadata fresh for _typeshed: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\_typeshed\__init__.pyi
LOG: Metadata fresh for ast: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\ast.pyi
LOG: Metadata fresh for io: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\io.pyi
LOG: Metadata fresh for typing: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\typing.pyi
LOG: Metadata fresh for typing_extensions: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\typing_extensions.pyi
LOG: Metadata fresh for importlib.abc: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\importlib\abc.pyi
LOG: Metadata fresh for importlib.machinery: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\importlib\machinery.pyi
LOG: Metadata fresh for array: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\array.pyi
LOG: Metadata fresh for mmap: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\mmap.pyi
LOG: Metadata fresh for os: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\os\__init__.pyi
LOG: Metadata fresh for _ast: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\_ast.pyi
LOG: Metadata fresh for codecs: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\codecs.pyi
LOG: Metadata fresh for collections: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\collections\__init__.pyi
LOG: Metadata fresh for abc: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\abc.pyi
LOG: Metadata fresh for importlib: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\importlib\__init__.pyi
LOG: Metadata fresh for posix: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\posix.pyi
LOG: Metadata fresh for subprocess: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\subprocess.pyi
LOG: Metadata fresh for os.path: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\os\path.pyi
LOG: Metadata fresh for _collections_abc: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\_collections_abc.pyi
LOG: Metadata fresh for ntpath: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\ntpath.pyi
LOG: Metadata fresh for genericpath: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\genericpath.pyi
LOG: Metadata fresh for posixpath: file C:\Dev\anaconda3\envs\spy\lib\site-packages\mypy\typeshed\stdlib\posixpath.pyi
LOG: Loaded graph with 28 nodes (0.084 sec)
LOG: Found 4 SCCs; largest has 25 nodes
LOG: Processing 3 queued fresh SCCs
LOG: Processing SCC singleton (mypy_minrepro.test.main) as inherently stale
mypy_minrepro\test\main.py:8: error: Cannot find implementation or library stub for module named "untyped.main"
mypy_minrepro\test\main.py:8: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
LOG: Deleting mypy_minrepro.test.main C:\Dev\Code\mypy_minrepro\test\main.py mypy_minrepro\test\main.meta.json mypy_minrepro\test\main.data.json
LOG: No fresh SCCs left in queue
LOG: Build finished in 0.199 seconds with 28 modules, and 2 errors因此找不到存根目录。现在我不想真的移动这些目录,那么我如何修复这个结构呢?
发布于 2021-10-27 10:28:21
好的,我理解了mypy_path的语义。2问题:
首先,除非与--config-file一起传递,否则mypy将在调用命令的当前工作目录中查找mypy.ini (然后在其他全局位置)。从医生那里 (强调我自己的):
默认情况下,从当前目录mypy.ini中的.mypy.ini、pyproject.toml或setup.cfg 读取设置。设置覆盖mypy的内置默认值,命令行标志可以覆盖设置。
这就是为什么在详细日志(-v)中我得到的是Config File: Default而不是Config File: mypy.ini。
第二个问题:如果mypy_path是相对的(例如mypy_path = test/stubs),那么它相对于运行mypy命令的当前目录。因此,即使mypy找到了我的配置文件(通过手动传递),如果我从父目录或子目录运行它,解析的mypy_path也会有所不同。
要解决这个问题,请使用$MYPY_CONFIG_FILE_DIR/stubs定义一个相对于配置文件的路径,无论它在哪里。
https://stackoverflow.com/questions/69728474
复制相似问题