【问题标题】:MyPy can't find types for my local packageMyPy 找不到我的本地包的类型
【发布时间】:2022-01-16 03:03:01
【问题描述】:

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

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

例如,我的布局如下所示:

- 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 <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"

当我在 myapp 上运行 mypy 时,我得到如下信息:

myapp/__init__.py:1:1: error: Cannot find implementation or library stub for module named "common"  [import]

【问题讨论】:

    标签: python-3.x mypy python-poetry


    【解决方案1】:

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

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

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

    【讨论】:

    • 我的 util/common 包有一个 py.typed 文件(参见上面的目录结构)。是不是在错误的位置?我尝试将它向上移动一个目录,但它也不起作用。
    • 对不起,我错过了。我怀疑py.typed 适用于已安装 包,因此您可能想尝试以--editable 模式安装包:cd &lt;path-to-package&gt;/commonpip install -e ./
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 2022-06-14
    • 1970-01-01
    • 2016-04-17
    • 2017-02-03
    相关资源
    最近更新 更多