python类型推断器

pytype的Python项目详细描述


构建状态

pytype-

pytype检查和推断python代码的类型-不需要类型 注解。pytype可以:

pytype是一个静态分析器,这意味着它不执行它运行的代码。

google的数千个项目都依赖pytype来保存它们的python代码 打印良好且无错误。

有关详细信息,请参阅《用户指南》或《常见问题解答》。

pytype与其他类型的checker有何不同?

  1. pytype使用推理而不是渐进式类型。这意味着它会 即使代码上没有类型提示,也可以推断代码上的类型。所以它可以 检测此类代码的问题,其他类型的检查程序将忽略这些问题:

    deff():return"PyCon"defg():returnf()+2019# pytype: line 4, in g: unsupported operand type(s) for +: 'str'# and 'int' [unsupported-operands]
  2. pytype是宽松的而不是严格的。这意味着它允许所有 在运行时成功且不与注释冲突的操作。为了 实例中,此代码将在pytype中安全传递,但在其他类型中失败。 检查程序,在初始化变量后立即将类型分配给它们:

    fromtypingimportListdefget_list()->List[str]:lst=["PyCon"]lst.append(2019)return[str(x)forxinlst]# mypy: line 4: error: Argument 1 to "append" of "list" has# incompatible type "int"; expected "str"
  3. < > >

    另请参见相应的faq条目

    快速启动

    要快速开始类型检查文件或目录,请运行 接下来,用您的输入替换文件或目录

    pip install pytype
    pytype file_or_directory
    

    要在整个包上设置pytype,请将以下内容添加到set up.cfg文件中 在包正上方的目录中,用 包裹名称:

    [pytype]
    inputs = package_name
    

    现在可以运行no-argument命令pytype来键入check包。它是 也很容易将pytype添加到自动化测试中;请参见 在travis上运行pytype的github项目的示例

    最后,pytype生成推断类型信息的文件,默认情况下位于 在.pytype/pyi中。您可以使用此信息键入annotate 相应的源文件,用文件的导入路径替换module.py

    merge-pyi -i module.py .pytype/pyi/module.pyi
    

    要求

    您需要一个python 2.7或3.5+解释器来运行pytype,以及 在$path中为您正在分析的代码的python版本解释器。

    平台支持:

    • pytype目前是在linux上开发和测试的,linux是主要支持的 站台。
    • 在MacOSX上安装需要OSX 10.7或更高版本以及Xcode V8或更高版本。
    • 当前不支持Windows,除非您使用wsl

    安装

    pytype可以通过pip安装。请注意,安装需要车轮 以及设置工具。(如果您在Virtualenv中工作,这两个包应该 已经存在。)

    pip install pytype
    

    或者从github上的源代码

    git clone --recurse-submodules https://github.com/google/pytype.git
    cd pytype
    pip install -U .
    

    您也可以运行

    git submodule init
    git submodule update
    

    pytype目录中。

    安装在wsl上

    按照上面的步骤操作,但请确保首先拥有正确的库:

    sudo apt install build-essential python3-dev libpython3-dev
    

    用法

    deff():return"PyCon"defg():returnf()+2019# pytype: line 4, in g: unsupported operand type(s) for +: 'str'# and 'int' [unsupported-operands]
    0

    常用选项:

    • -v,--python版本:目标代码的python版本(major.minor)。 默认为3.6
    • -o,--output:所有pytype输出进入的目录,包括 生成.pyi文件。默认为.pytype
    • -d,--禁用。要忽略的错误名称的逗号分隔列表。详细的 pytype错误名称的解释见本文档。 默认为空。

    有关选项的完整列表,请运行pytype--help

    除上述内容外,还可以指示pytype使用自定义typeshed 通过设置$typeshed\u home而不是自己的捆绑副本来安装

    配置文件

    为了方便起见,可以将pytype配置保存在文件中。配置 文件是具有[pytype]节的ini样式文件;如果是显式配置文件 未提供,pytype将在第一个 setup.cfg从当前工作目录向上移动找到的文件。

    首先生成一个示例配置文件:

    deff():return"PyCon"defg():returnf()+2019# pytype: line 4, in g: unsupported operand type(s) for +: 'str'# and 'int' [unsupported-operands]
    1

    现在根据本地设置自定义文件,只保留 需要。目录可能与配置文件的位置有关,即 如果您想作为项目的一部分签入配置文件,则此功能非常有用。

    例如,假设您有以下目录结构,并希望 分析包~/repo1/foo,这取决于包~/repo2/bar

    deff():return"PyCon"defg():returnf()+2019# pytype: line 4, in g: unsupported operand type(s) for +: 'str'# and 'int' [unsupported-operands]
    2

    下面是填充的配置文件,它指示pytype进行类型检查 ~/repo1/foo作为python 3.6代码,在~/repo1~/repo2中查找包, 忽略属性错误。请注意,包的路径不包括 包裹本身。

    deff():return"PyCon"defg():returnf()+2019# pytype: line 4, in g: unsupported operand type(s) for +: 'str'# and 'int' [unsupported-operands]
    3

    我们本可以发现~/repo2需要通过 运行pytype的断开依赖关系检查器:

    deff():return"PyCon"defg():returnf()+2019# pytype: line 4, in g: unsupported operand type(s) for +: 'str'# and 'int' [unsupported-operands]
    4

    小计

    除了pytype本身之外,pytype还附带了一些脚本:

    • 注释ast,用于ast的进行中类型注释器。
    • 合并pyi,用于将.pyi文件中的类型信息合并到 python文件。
    • pytd,用于.pyi文件的解析器。
    • pytype single,pytype开发人员的调试工具,它分析 单个python文件,假设已经为所有 其依赖关系。
    • pyxref,交叉引用生成器。

    路线图

    • Windows支持

    许可证

    阿帕奇2.0

    免责声明

    这不是谷歌的官方产品。

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java根据选择随机设置图标   java如何将Android Studio与本地服务器数据库SQL server 2008连接?   java在点击鼠标后绘制一个椭圆形   java选项窗格相对于其父项的位置   java如何在Android中的switch case中使用String[]输入?   安卓无法从“15.0.1”确定java版本   如果满足特定条件,java是否重置计时器?   java是一个实体类,可以在OOAD中返回其他实体实例吗?   bash将对jar文件| cut | awk和java程序的调用集成到一个统一进程中   Spring安全更新身份验证成功时的最后登录日期   数据库身份验证中基于Java控制台的客户端服务器登录应用程序错误   java Selenium junit测试失败,驱动程序过早获取URL   java LibGdx多点触摸事件混淆   带扫描仪的java打印空间   来自旧版应用程序的java springcloudsleuth头   java如何实现模板设计模式?   java如何比较具有多个值的键的两个映射?   读取时R中的java MemoryError。xlsx