You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mypy未检测到外部导入函数错误调用的问题排查

问题原因与解决方案

你遇到的问题核心是已安装的Python包没有向mypy提供类型信息,导致mypy将导入的foo函数视为"无类型"对象,从而跳过了类型检查。

具体原因

  • 本地定义的internal_foo:mypy直接读取源码解析类型签名,能正常检测调用错误。
  • 安装后的my_package.example.foo:mypy默认不会解析已安装包的源码,除非包明确声明包含类型信息,因此它会把该函数当成无类型对象,不触发类型校验。

解决步骤

1. 添加类型标记文件

在my_package目录下创建一个空的py.typed文件——这是Python官方标准标记,用于告知mypy该包包含类型注解,需要进行类型检查。

2. 修改setup.py确保打包包含标记文件

更新setup.py,添加package_data配置,保证py.typed被纳入wheel包:

from setuptools import setup

setup(
    name='ExamplePackage',
    version='0.1.0',
    author='An Awesome Coder',
    author_email='aac@example.com',
    packages=['my_package'],
    package_data={'my_package': ['py.typed']},
    include_package_data=True,
    description='An awesome package that does something',
)

3. 重新打包安装

执行打包命令生成新的wheel文件:

python ./setup.py bdist_wheel

将新wheel文件复制到目标项目后重新安装:

pip install ExamplePackage-0.1.0-py3-none-any.whl

4. 验证mypy检查结果

再次运行mypy main.py,会看到与internal_foo一致的错误提示:

error: Missing positional arguments "number", "text" in call to "foo"  [call-arg]
error: "foo" does not return a value  [func-returns-value]

内容的提问来源于stack exchange,提问作者yanivps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 09:10:29