自动创建.pyi文件?

问题描述 投票:0回答:2

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

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

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

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

目标:在 PyCharm for Python2 中进行类型提示。

python pycharm python-typing
2个回答
48
投票

就我而言,PyCharm 中没有这样的直接工具。不过,有第三方工具可以实现此目的。


.pyi
发电机

我的Py

是的,我想任何想要在 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

制作存根文件

该项目正是致力于实现这一目标。

使用方法

一个非常基本的(但它有一些选项,只需参考

README.md
make_stub_files -h

make_stub_files foo.py

预先编写的
.pyi
文件

所以你不必自己编写。

打字棚

是的,如果您在自己的项目中使用

.pyi
文件,那么在使用外部代码时您可能也想使用它。 Typeshed 包含用于 Python2 和 Python3 stdlib 的
.pyi
文件以及一堆 Python2 库(如 rediscrypto,...)和一些 Python3 库(如 werkzeugrequests),所有这些都有很好的版本控制。


PyCharm
.pyi
文件的替代品

如果您很懒,或者只是从事不需要

.pyi
文件的项目,并且您不想被使用 3rd 方工具打扰,PyCharm 允许您使用:


2
投票

我为此编写了一个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
文件。它们将包含在包装中 只要它们是
package_data
的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.