为什么 mypy 通过 -p 命令行选项传递包时找不到我的包?

问题描述 投票:0回答:2

我位于包含 python 包的目录中,并运行

mypy -p <package-name>
,但它只是错误地显示“找不到包”。

我做错了什么?

python python-typing mypy
2个回答
6
投票

我丢失了文件

<my-package>/__init__.py
,所以从技术上来说它实际上并不是一个 Python 包。它确实有一个
__main__.py
文件,这就是命令
python -m <my-package>
仍然有效的原因。


1
投票

我发现在像

这样的源代码树中
├── 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 的存在而言。

© www.soinside.com 2019 - 2024. All rights reserved.