python的库存根集合,具有静态类型

typeshed的Python项目详细描述


Build StatusChat at https://gitter.im/python/typing

关于

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

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

推荐PyPI第三方库


热门话题
java数据不显示在FXML表中   java如何使整个JTable不可编辑   Java中的swing JTree JTable组合   Windows下的java诊断NIO DatagramChannel读取问题   java Dockerfile运行可执行文件   java手动初始化字节数组以测试更改   java Selenium Webdriver | DragAndDrop功能|也不例外,但代码不起作用   java Hibernate使用多对多关系和左连接多次加载同一实体?   java正在努力开发带有接口和泛型集的API   mongodb mongo java条件和如果不为null   Java程序不显示使用arduino ethernet shield在网页上发送的数据   java将JSONObject转换为JSONArray错误   java Box布局可以接受包含元素的大小吗?