【问题标题】:Create .pyi files automatically?自动创建 .pyi 文件?
【发布时间】:2016-06-06 18:22:47
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你创建pyi文件的模块是什么?
  • @rakslice 我想要 python 文件的类型提示。但是这个问题已经过时了。在接下来的几个月里,我们正在从 Python2 切换到 Python3。

标签: python pycharm type-hinting


【解决方案1】:

就我而言,PyCharm 中没有这样的直接工具。但是,有用于此目的的 3rd 方工具。


.pyi 发电机

MyPy

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

用法

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 标准库的 .pyi 文件和一堆 Python2 库(如 rediscrypto、...)和一些 Python3 库(如 werkzeugrequests),所有版本都很好。


.pyi 文件的 PyCharm 替代品

如果您很懒惰,或者只是在处理不需要 .pyi 文件的项目,并且不想被使用第三方工具所困扰,PyCharm 允许您使用:

【讨论】:

  • 我想使用stubgen,但对如何指定我的包目录的自定义路径有点困惑。我看不出来。是否可以为此提供一个示例?
  • @jonathan:我目前无法使用 MyPy 安装 Python,但代码显示您应该可以使用 --search_path option。我已将其添加到答案中,但如果您尝试一下,如果它不起作用,请给我反馈,以便我修复它。
  • 选项是'--search-path',不带下划线。我先尝试过,但失败了……
  • @jonathan 哦,是的,当然,它是一个破折号,而不是一个下划线。我的错。感谢您指出这一点,我已经解决了这个问题。
【解决方案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 之前在与其对应的.py 文件相同的位置生成.pyi 文件。它们将包含在 provided that they are part of package_data 包中。

【讨论】:

    猜你喜欢
    • 2021-03-14
    • 2018-03-12
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2015-12-09
    • 2020-11-03
    • 2010-11-05
    • 1970-01-01
    相关资源
    最近更新 更多