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)
当我继续运行时,mypy我myapp得到类似的信息:
myapp/__init__.py:1:1: error: Cannot find implementation or library stub for module named "common" [import]
Run Code Online (Sandbox Code Playgroud)
假设“util”包具有类型提示,您需要向py.typed其中添加一个文件(在包的根目录中),以便 mypy 理解它带有类型提示。py.typed应该是空的,它只是一个标志文件。
如果您的包没有类型提示,那么您必须添加存根文件 ( .pyi)。
更多详细信息:https://mypy.readthedocs.io/en/stable/installed_pa ckages.html#creating-pep-561-known-packages