Skip to main content

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 adding 有问题的文件。您还可以通过设置环境变量来禁用此行为PYSEN_IGNORE_GIT=1

问:如何只运行 [flake8|black|isort|mypy]?
A. 试试--enableand--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 lintpysen 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(出于这个原因) ,这也适用

结果将如下所示:

pysen-vim

第三方插件也可用。

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 按以下顺序查找配置文件:

  1. pysen.tomltool.pysen一段
  2. pyproject.tomltool.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每个案例的目标和概念。如有疑问,请不要犹豫,先打开一个问题。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pysen-0.10.2.tar.gz (47.8 kB 查看哈希

已上传 source

内置分布

pysen-0.10.2-py3-none-any.whl (57.7 kB 查看哈希

已上传 py3