Python linting 变得容易。也是一种随意而敬重的方式来称呼在您之前进入组织的个人。
项目描述
皮森
安装
派皮
如果你对 linter 版本没有偏好(推荐给新手)
pip install "pysen[lint]"
使用您选择的 linter 版本安装 pysen
pip install pysen
pip install black==21.10b0 flake8==4.0.1 isort==5.10.1 mypy==0.910
其他安装示例
# pipenv
pipenv install --dev "pysen[lint]==0.10.2"
# poetry
poetry add -D pysen==0.10.2 -E lint
快速入门:使用 pysen 设置 linter
将以下 pysen 配置放入您的 python 包中的一个pysen.toml
或一个:pyproject.toml
[tool.pysen]
version = "0.10"
[tool.pysen.lint]
enable_black = true
enable_flake8 = true
enable_isort = true
enable_mypy = true
mypy_preset = "strict"
line_length = 88
py_version = "py37"
[[tool.pysen.lint.mypy_targets]]
paths = ["."]
然后,执行以下命令:
$ pysen run lint
$ pysen run format # corrects errors with compatible commands (black, isort)
而已!pysen,或更准确地说是支持指定 linter 的 pysen 任务,为 black、isort、mypy 和 flake8 生成设置文件,并使用适当的配置运行它们。关于配置文件中可以写入的配置项的详细信息,请参考pysen/pyproject_model.py
.
您还可以通过将以下行添加到 Python 包中来添加自定义设置命令setup.py
:
import pysen
setup = pysen.setup_from_pyproject(__file__)
$ python setup.py lint
我们还提供了一个 Python 接口,用于自定义我们的配置和扩展 pysen。更多细节请参考以下两个例子:
- 来自 Python 的示例配置:
examples/advanced_example/config.py
- pysen 的示例插件:
examples/plugin_example/plugin.py
经常问的问题
问:如何使用mypy >= 0.800
?
A. 请参阅使用您选择的 linter 版本安装 pysen
Q.mypy 报错Source file found twice under different module names
。
A. 添加tool.pysen.lint.mypy_targets
部分,以便文件名在每个部分中是唯一的。
问:如何更改 linter X 的特定设置?
A. 我们将约定优先于配置。但是,您始终可以创建自己的插件。参见:创建插件来自定义 pysen
Q. pysen 似乎忽略了一些文件。
A. pysen 只检查在 git 中跟踪的文件。尝试git add
ing 有问题的文件。您还可以通过设置环境变量来禁用此行为PYSEN_IGNORE_GIT=1
。
问:如何只运行 [flake8|black|isort|mypy]?
A. 试试--enable
and--disable
选项,例如,pysen --enable flake --enable black run lint
。
Q. 不检查没有文件扩展名的文件。
A. 将这些文件显式添加到tool.pysen.lint.source
.
问:如何向我的 pydantic-mypy 添加pyproject.toml
其他设置?
A.settings_dir="."
在该[tool.pysen-cli]
部分下添加。
什么是皮森?
pysen 旨在提供一个统一的平台来配置和运行日常开发工具。我们设想未来的场景如下:
- 您打开任何项目
pysen run lint
,pysen run format
将检查并格式化整个代码库 - 标准化的编码风格是在一个配置文件中用几行设置的
pysen 集中了团队积累的与开发工具相关的代码和知识,尤其是对于 python linter。您可以创建可以从setup.py
我们的命令行工具和我们的命令行工具执行的任务。我们目前提供管理以下工具的设置文件的任务:
- 短绒
- 片状8
- 异类
- 我的
- 黑色的
- 公用事业
- (计划的)协议
什么不是 pysen?
- pysen 本身并不是一个 linting 工具。相反,
pysen run lint
通过从更抽象的 pysen 设置自动设置它们的配置来编排多个 python linting 工具。 - pysen 不管理你的依赖和包。我们建议使用诸如pipenv或诗歌之类的包管理器来锁定您的依赖版本,包括 pysen 协调的 linting 工具的版本(即,isort、mypy、flake8、black)。这些工具的支持版本可以
extra_requires/lint
在 pysen 的setup.py部分中找到。您不应依赖于pip install pysen[lint]
控制 linting 工具的版本。 - pysen 不仅限于 linting 目的或 python。有关详细信息,请参阅插件部分。
工作原理:设置文件目录
在后台,每当你运行 pysen 时,它都会将设置文件生成为临时临时文件,供 linter 使用。您可能希望将这些设置文件保留在磁盘上,例如当您想将它们用于您的编辑器时。如果是这种情况,请运行以下命令将设置文件生成到您选择的目录中:
$ pysen generate [out_dir]
您可以指定 pysen 在pysen run
. 为此,请将以下部分添加到您的配置中:
[tool.pysen-cli]
settings_dir = "path/to/generate/settings"
当你指定一个已经包含一些配置的目录时,pysen 会合并这些内容。产生的行为可能与您未指定settings_dir
.
另请记住,仅当您通过其 CLI 使用 pysen 时,才会使用此选项。使用 pre-commit 或 setuptools 时,您需要指定settings_dir
为参数。
提示:IDE/文本编辑器集成
vim
您可以通过以下方式将 pysen 报告的错误添加到您的快速修复窗口:
:cex system("pysen run_files lint --error-format gnu ".expand('%:p'))
另一种方法是将 pysen 设置为makeprg
:
set makeprg=pysen\ run_files\ --error-format\ gnu\ lint\ %
然后运行:make
将在您的快速修复窗口中填充错误。vim-dispatch
只要您调用:Make
而不是:Dispatch
(出于这个原因) ,这也适用
结果将如下所示:
第三方插件也可用。
Emacs
请参阅编译模式。以下是 python 的示例钩子。
(add-hook 'python-mode-hook
(lambda ()
(set (make-local-variable 'compile-command)
(concat "pysen run_files lint --error-format gnu " buffer-file-name))))
VSCode
第三方插件可用。
请注意,如果您flake8
直接通过 VSCode python 扩展配置了 linter,这可能会报告重复的错误。
配置pysen
我们提供了两种方法来为 pysen 编写配置。
一个是[tool.pysen.lint]
配置中的部分。这是配置pysen最简单的方法,但是我们提供的设置是有限的。
另一种方法是写一个python脚本直接配置pysen。如果您想自定义 pysen 生成的配置文件、pysen 执行的命令行参数或 pysen 执行的任何操作,我们建议您使用此方法。有关更多示例,请参阅pysen/examples
。
配置模型
请参阅pysen/pyproject_model.py
最新型号。
下面是一个基本配置的例子:
[tool.pysen]
version = "0.10"
[tool.pysen.lint]
enable_black = true
enable_flake8 = true
enable_isort = true
enable_mypy = true
mypy_preset = "strict"
line_length = 88
py_version = "py37"
isort_known_third_party = ["numpy"]
isort_known_first_party = ["pysen"]
mypy_ignore_packages = ["pysen.generated.*"]
mypy_path = ["stubs"]
[[tool.pysen.lint.mypy_targets]]
paths = [".", "tests/"]
[tool.pysen.lint.source]
includes = ["."]
include_globs = ["**/*.template"]
excludes = ["third_party/"]
exclude_globs = ["**/*_grpc.py"]
[tool.pysen.lint.mypy_modules."pysen.scripts"]
preset = "entry"
[tool.pysen.lint.mypy_modules."numpy"]
ignore_errors = true
pysen 按以下顺序查找配置文件:
pysen.toml
有tool.pysen
一段pyproject.toml
有tool.pysen
一段
创建一个插件来自定义pysen
我们提供了一个插件界面,用于自定义我们的工具支持、设置文件管理、设置命令等。更多详情,请参阅pysen/examples/plugin_example
。
发展
pipenv
是管理我们的开发环境所必需的。
# setup your environment
$ pipenv sync
# activate the environment
$ pipenv shell
- 更新依赖关系
Pipfile.lock
$ pipenv lock --pre
- 运行所有测试
$ pipenv run tox
mypy 预设
mypy 预设strict
旨在使使用以下软件包的开发人员的生活更轻松:
- 开放式CV
- PyTorch
- scikit-学习
我们建议开发人员从预设中减轻一些规则very strict
以避免一些麻烦。如果您使用这些带有strict
预设的软件包并且仍然有不便,请告诉我们。
贡献
我们的首要任务是满足 Preferred Networks 内项目的需求。因此,我们必须评估每个功能/拉取请求是否符合我们项目的最佳利益。原则上,我们对以下小事持开放态度:
- 报告错误的问题
- 修复错别字或小故障的小型 PR
至于新功能或主要功能增强,核心开发人员将确定提出的想法是否符合pysen
每个案例的目标和概念。如有疑问,请不要犹豫,先打开一个问题。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。