自动创建.pyi文件?

时间:2016-02-24 12:42:47

标签: python pycharm type-hinting

如何自动创建pyi个文件的样板代码?

我想为pyi中描述的类型提示创建一个pep484文件,其中包含所有方法名称。

我不想要魔法。我想在自动创建文件后添加类型信息。

我想避免复制+粘贴工作。

目标:在PyCharm中为Python2键入提示。

2 个答案:

答案 0 :(得分:19)

就我而言,PyCharm中没有这样的直接工具。但是,有第三方工具。

.pyi个生成器

MyPy

是的,我想任何想在Python中使用编译时类型检查的人都可能最终使用MyPy。 MyPy包含stubgen.py工具,可生成.pyi个文件。

用法

mkdir out
stubgen urllib.parse

生成out/urllib/parse.pyi

您也可以使用Python2:

stubgen --py2 textwrap

对于C模块:

scripts/stubgen --docpath <DIR>/Python-3.4.2/Doc/library curses

如果要指定自定义程序包的路径,可以使用--search-path选项:

stubgen my-pkg --search-path=folder/path/to/the/package

make-stub-files

这个项目致力于实现这一目标。

用法

非常基本的(但它有一些选项,只需咨询README.mdmake_stub_files -h

make_stub_files foo.py

预先编写的.pyi个文件

所以你不必自己写。

Typeshed

是的,如果您在自己的项目中使用.pyi个文件,则在使用外部代码时也可能需要使用此文件。 Typeshed包含Python2和Python3 stdlib的.pyi文件以及一堆Python2库(如rediscrypto,...)和一些Python3库(如werkzeug或{ {3}}),所有版本都很好。

PyCharm替代.pyi个文件

如果你很懒,或者只是处理一个不需要.pyi文件的项目,并且你不想被第三方工具打扰,PyCharm允许你使用:< / p>

答案 1 :(得分:1)

我为此编写了一个makefile:

package := example
sources := $(wildcard $(package)/*.py)

stub: $(sources)
    stubgen --output . --package $(package)

dist: setup.py stub
    python $< sdist bdist_wheel

publish: dist
    twine upload dist/*

.PHONY += stub dist publish

运行make publish将在打包并上载到PyPI之前,在与其对应的.pyi文件相同的位置生成.py文件。它们将包含在软件包provided that they are part of package_data中。