如何自动创建 pyi 文件的样板代码?
我想创建一个 pyi 文件用于类型提示,如 pep484 中所述,其中包含所有方法名称。
我不想要魔法。我想在自动创建文件后添加类型信息。
我想避免复制+粘贴工作。
目标:在 PyCharm for Python2 中进行类型提示。
就我而言,PyCharm 中没有这样的直接工具。不过,有第三方工具可以实现此目的。
.pyi
发电机是的,我想任何想要在 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 库(如 redis、crypto,...)和一些 Python3 库(如 werkzeug 或 requests),所有这些都有很好的版本控制。
.pyi
文件的替代品如果您很懒,或者只是从事不需要
.pyi
文件的项目,并且您不想被使用 3rd 方工具打扰,PyCharm 允许您使用:
我为此编写了一个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
的一部分。