我有两个 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]
假设“util”包有类型提示,您需要向其中添加一个
py.typed
文件(在包的根目录中),以便 mypy 理解它带有类型提示。 py.typed
应该是空的,它只是一个标志文件。
如果你的包确实 not 有类型提示,那么你必须添加存根文件(
.pyi
)。
更多详情:https://mypy.readthedocs.io/en/stable/installed_packages.html#creating-pep-561-compatible-packages
以下对我有用:将您的图书馆路径添加到
MYPYPATH
环境变量:
export MYPYPATH=$MYPYPATH:path/to/common
如果需要,您可以在 bash 配置文件中进行设置。我不知道是否有更简洁的方法让 mypy 自动检测此类本地包。 文档说:
找不到实现或库存根
如果您收到
错误,这意味着 mypy 无法找到您尝试导入的模块,无论它是否与类型提示捆绑在一起。如果您收到此错误,请尝试:Cannot find implementation or library stub for module