MyPy 找不到我的本地包的类型

nil*_*ltz 9 python mypy python-typing python-poetry

我有两个 python 包。一种是 util 库,一种是将使用 util 库的应用程序(最终我将有更多应用程序共享该库。

path我对两者都使用诗歌,并且应用程序使用和属性将公共库指定为依赖项develop

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

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

- myapp/
   - myapp/
      - __init__.py
      - py.typed
   - pyproject.toml
Run Code Online (Sandbox Code Playgroud)

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

[tool.poetry]
name = "myapp"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]

[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"
Run Code Online (Sandbox Code Playgroud)

当我继续运行时,mypymyapp得到类似的信息:

myapp/__init__.py:1:1: error: Cannot find implementation or library stub for module named "common"  [import]
Run Code Online (Sandbox Code Playgroud)

Gio*_*eri 3

假设“util”包具有类型提示,您需要向py.typed其中添加一个文件(在包的根目录中),以便 mypy 理解它带有类型提示。py.typed应该是空的,它只是一个标志文件。

如果您的包没有类型提示,那么您必须添加存根文件 ( .pyi)。

更多详细信息:https://mypy.readthedocs.io/en/stable/installed_pa ​​ckages.html#creating-pep-561-known-packages

  • 我的 util/common 包有一个 py.typed 文件(请参阅上面的目录结构)。是不是位置不对?我尝试将其向上移动一个目录,但也不起作用。 (2认同)