MyPy 无法为我的本地包找到类型

问题描述 投票:0回答:2

我有两个 python 包。一个是util库,一个是会使用util库的应用(最终我会有更多的app共享这个库

我正在为两者使用诗歌,并且该应用程序使用

path
develop
属性将公共库指定为依赖项。

例如,我的布局看起来像这样:

- common/
   - common/
      - __init__.py
      - py.typed
   - pyproject.toml

- myapp/
   - myapp/
      - __init__.py
      - py.typed
   - pyproject.toml

myapp\pyproject.toml
看起来像这样:

[tool.poetry]
name = "myapp"
version = "0.1.0"
description = ""
authors = ["Your Name <[email protected]>"]

[tool.poetry.dependencies]
python = "^3.9"
common = { path = "../common", develop = true }

[tool.poetry.dev-dependencies]
mypy = "^0.910"
flake8 = "^4.0.1"
black = {version = "^21.12b0", allow-prereleases = true}
pytest = "^6.2.5"
pytest-cov = "^3.0.0"
pytest-mock = "^3.6.1"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

当我在

mypy
上运行
myapp
时,我得到类似的东西:

myapp/__init__.py:1:1: error: Cannot find implementation or library stub for module named "common"  [import]
python mypy python-typing python-poetry
2个回答
2
投票

假设“util”包有类型提示,您需要向其中添加一个

py.typed
文件(在包的根目录中),以便 mypy 理解它带有类型提示。
py.typed
应该是空的,它只是一个标志文件。

如果你的包确实 not 有类型提示,那么你必须添加存根文件(

.pyi
)。

更多详情:https://mypy.readthedocs.io/en/stable/installed_packages.html#creating-pep-561-compatible-packages


0
投票

以下对我有用:将您的图书馆路径添加到

MYPYPATH
环境变量:

export MYPYPATH=$MYPYPATH:path/to/common

如果需要,您可以在 bash 配置文件中进行设置。我不知道是否有更简洁的方法让 mypy 自动检测此类本地包。 文档说

找不到实现或库存根

如果您收到

Cannot find implementation or library stub for module
错误,这意味着 mypy 无法找到您尝试导入的模块,无论它是否与类型提示捆绑在一起。如果您收到此错误,请尝试:

  1. 阅读下面的如何找到导入部分,以确保您了解 mypy 究竟如何搜索和查找模块,并相应地修改调用 mypy 的方式。

  2. 通过使用

    mypy_path
    files
    配置文件选项,或使用
    MYPYPATH
    环境变量,直接指定包含要从命令行键入检查的模块的目录。

© www.soinside.com 2019 - 2024. All rights reserved.