首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在配置中卡在mypy_path中而不被拾取

在配置中卡在mypy_path中而不被拾取
EN

Stack Overflow用户
提问于 2021-10-26 18:49:25
回答 1查看 1K关注 0票数 0

我有这样的结构:

代码语言:javascript
复制
mypy_minrepro
|   mypy.ini
|   __init__.py
|   
+---test
|   |   main.py
|   |   __init__.py
|   |   
|   \---stubs
|       \---untyped
|               main.pyi
|               __init__.pyi
|               
\---untyped
        main.py
        __init__.py

有一些简单的文件:

mypy.ini

代码语言:javascript
复制
[mypy]
mypy_path = test/stubs

untyped/main.py

代码语言:javascript
复制
def foo(x):
    return x ** 2

test/stubs/untyped/main.pyi

代码语言:javascript
复制
def foo(x: float) -> float: ...

test/main.py

代码语言:javascript
复制
from untyped.main import foo

if __name__ == "__main__":
    foo("invalid") # I want mypy to spot this error using my .pyi file

当我从包外部运行时,所以./mypy_minrepro,下面的命令如下:

代码语言:javascript
复制
mypy -m mypy_minrepro.test.main

我得到:

mypy_minrepro\test\main.py:8:错误:找不到名为"untyped.main“的模块的实现或库存根

代码语言:javascript
复制
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

因此找不到存根目录。现在我不想真的移动这些目录,那么我如何修复这个结构呢?

EN

回答 1

Stack Overflow用户

发布于 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定义一个相对于配置文件的路径,无论它在哪里。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69728474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档