我位于包含 python 包的目录中,并运行
mypy -p <package-name>
,但它只是错误地显示“找不到包”。
我做错了什么?
我丢失了文件
<my-package>/__init__.py
,所以从技术上来说它实际上并不是一个 Python 包。它确实有一个 __main__.py
文件,这就是命令 python -m <my-package>
仍然有效的原因。
我发现在像
这样的源代码树中├── poetry.lock
├── pyproject.toml
└── src
└── ns
└── pkg
└── __init__.py
使用以下 pyproject.toml*:
[tool.poetry]
name = "test-pkg"
version = "0.1.0"
description = "meh"
authors = ["Your Name <[email protected]>"]
packages = [{include = "ns", from = "src"}]
[tool.poetry.dependencies]
python = "^3.11"
[tool.poetry.group.dev.dependencies]
mypy = "^1.6.1"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
[tool.mypy]
packages = ["ns.pkg"]
我会得到
$ poetry run mypy
Can't find package 'ns.pkg'
但是如果我将
py.typed
添加到包裹中:
$ > src/ns/pkg/py.typed
$ poetry run mypy
Success: no issues found in 1 source file
同样
src
└── ns
└── pkg.py
失败了,但是
src
└── ns
├── pkg.py
└── py.typed
通过。
*注:我认为我在这里使用诗歌并不重要。我相信在包位于 pythonpath 上的任何环境中,mypy 的行为都是相同的,就 py.typed 的存在而言。