python的库存根集合,具有静态类型
typeshed的Python项目详细描述
关于
typeshed包含python标准的外部类型注释 库和python内置,以及第三方包。
此数据可用于静态分析、类型检查或类型 推断。
有关如何使用typeshed的信息,请阅读下面的内容。信息为 贡献者可以在CONTRIBUTING.md中找到。 请在提交请求前阅读。
typeshed支持python版本2.7和3.3及更高版本。
使用
如果你只是使用mypy(或者pytype或者pycharm),而不是 开发它时,您根本不需要与类型化的repo交互: 一份打字本和我的皮包在一起。
当您使用mypy repo的签出克隆时,typeshed的副本 应作为子模块包含,使用
$ git clone --recurse-submodules https://github.com/python/mypy.git
或
$ git clone https://github.com/python/mypy.git $ cd mypy $ git submodule init $ git submodule update
有时你不得不重复最后的命令 (git submodule update)引入在上游所做的更改 类型化回购。
pycharm和pytype同样包含typeshed的副本。里面的那个 如果使用pytype,则可以用同样的方法更新pytype 回购。
格式
每个python模块都由一个.pyi“存根”表示。这是正常的 python文件(即,它可以由python 3解释),除了 方法为空。python函数注释(PEP 3107)用于 描述函数的类型。
具体见PEP 484 存根文件的语法。
语法示例
下面是datetime模块类型的摘录。
fromtypingimportUnionMAXYEAR=...# type: intMINYEAR=...# type: intclassdate(object):def__init__(self,year:int,month:int,day:int)->None:...@classmethoddeffromtimestamp(cls,timestamp:Union[int,float])->date:...@classmethoddeffromordinal(cls,ordinal:int)->date:...@classmethoddeftoday(self)->date:...defctime(self)->str:...defweekday(self)->int:...
目录结构
stdlib
它包含python标准库模块的存根 包括纯python模块、动态加载的扩展模块, 硬链接扩展模块和内置模块。
第三方
未随python提供但在 python进入third_party。因为这些模块可以 对于不同版本的python,third_partyhas 版本子目录,就像stdlib。
注意:当你为一个你没有的包贡献一个新的存根时 开发,请获得包所有者的同意(这是指定的 在PEP 484中)。 获得同意的最佳方式是向第三方提交问题 软件包的跟踪程序,并在您的公关中包含指向积极响应的链接 用于打印。
有关目录结构和存根版本控制的详细信息,请参见 the relevant section of CONTRIBUTING.md。
贡献
提交请求前请阅读CONTRIBUTING.md 请求。如果您有与贡献相关的问题,请访问 typing Gitter。
运行测试
测试由travis ci在每个pr上自动运行,并推到 回购。有几组测试:tests/mypy_test.py运行测试 反对mypy,而 tests/pytype_test.py对运行测试 pytype。
两组测试都很肤浅—它们验证了所有存根都可以 导入但不检查存根是否与实现匹配 (在python标准库或第三方包中)。另请注意 每组测试都有一个未在 全部。黑名单也存在于tests目录中。
另外,您可以运行tests/mypy_selftest.py来运行mypy自己的 使用repo中键入的代码的测试套件。有时会这样 用错误类型的存根捕获问题,但比 其他测试。
要手动运行mypy测试,需要使用python 3.5或更高版本; 建议使用Python3.6.1或更高版本。
运行:
$ python3.6 -m venv .venv3 $ source .venv3/bin/activate (.venv3)$ pip3 install -r requirements-tests-py3.txt
这将安装mypy(您需要来自github的最新主分支)。 键入ast和flake8。然后您可以运行mypy测试和flake8测试 调用:
(.venv3)$ python3 tests/mypy_test.py ... (.venv3)$ python3 tests/mypy_selftest.py ... (.venv3)$ flake8 ...
(请注意,flake8仅适用于python 3.6或更高版本。)
要运行pytype测试,y你需要一个单独的虚拟环境 Python2.7。运行:
$ virtualenv --python=python2.7 .venv2 $ source .venv2/bin/activate (.venv2)$ pip install -r requirements-tests-py2.txt
这将从其github repo安装pytype。然后可以运行pytype 运行测试:
(.venv2)$ python tests/pytype_test.py
对于mypy,如果您在mypy的子模块typeshed repo中 repo(因此..指的是mypy repo),有一个运行 避免安装mypy的mypy测试:
$ PYTHONPATH=.. python3 tests/mypy_test.py
可以通过传递-p2或^{tt13}将测试mypy到单个版本$ 例如
$ PYTHONPATH=.. python3 tests/mypy_test.py -p3.5 running mypy --python-version 3.5 --strict-optional # with 342 files