在 Ipython 中使用 Pylint(Jupyter-Notebook)

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

我想在使用 Jupyter-Notebook 时运行 Pylint 或任何等效程序。有没有办法以这种方式安装和运行 Pylint?

python python-3.x jupyter-notebook pylint flake8
5个回答
21
投票

pycodestyle 相当于 Jupyter Notebook 的

pylint
,它能够根据
PEP8
样式指南检查您的代码。

首先,您需要通过输入以下命令在

pycodestyle
中安装
jupyter notebook

!pip install pycodestyle pycodestyle_magic

在 jupyter 笔记本的单元格中运行此命令。 成功安装后,您必须像这样在 Jupyter Notebook 单元中加载魔法,

%load_ext pycodestyle_magic

然后,您必须在要根据

pycodestyle
标准调查代码的单元格中使用
PEP8

以下是一些示例,可以让您更清楚地理解,

%%pycodestyle
a=1

输出:

pycodestyle
会给你这个消息,

2:2: E225 missing whitespace around operator

另一个例子,

%%pycodestyle
def square_of_number(
     num1, num2, num3, 
     num4):
    return num1**2, num2**2, num3**2, num4**2

输出:

2:1: E302 expected 2 blank lines, found 0
3:23: W291 trailing whitespace

15
投票

我建议您考虑nbQA工具:

pip install nbqa pylint
nbqa pylint my_notebook.ipynb

除了

pylint
之外,
nbqa
还可以轻松运行其他几个格式化程序和linter工具,并且可以通过其专用的预提交挂钩轻松集成到您的开发工作流程中。


5
投票

更具体地回答有关

pylint
的问题。在开发/ci 环境(即命令行)中实现这一目标的一种相对简单的方法是将笔记本转换为 Python,然后运行 linting。

假设您在

./notebooks
文件夹中有笔记本,并且路径中有
jupyter
pylint
命令,您可以运行以下命令:

jupyter nbconvert \
    --to=script \
    --output-dir=/tmp/converted-notebooks/ \
    ./notebooks/*.ipynb
pylint /tmp/converted-notebooks/*.py

您可能需要配置 pylint,因为笔记本样式与一般 Python 模块略有不同。

您可能想要禁用的一些规则:

  • 毫无意义的陈述
  • 表达式未分配
  • 尾随换行符
  • 错误的导入位置
  • 重新定义外部名称
  • 名称无效

单元格中的最大字符数(水平滚动之前)似乎是

116
,但这可能取决于其他因素。

(例如,可以使用

--max-line-length
--disable
pylint 参数或通过
.pylintrc
文件配置这些选项)


4
投票

JupyterLab扩展jupyterlab-lsp支持pylint(但默认情况下禁用pylint):

https://github.com/python-lsp/python-lsp-server/issues/171#event-6236223765

pip install jupyterlab-lsp
pip install 'python-lsp-server[all]'

这是我在 Settings => Advanced Settings Editor 下的 LanguageServer 选项卡的配置,启用 pylint:

{  
    "language_servers": {
        "pyright": {
            "serverSettings": {
                "python.analysis.useLibraryCodeForTypes": true
            }
        },
        "pylsp": {
            "serverSettings": {
                "pylsp": {
                    "plugins": {
                        "pydocstyle": {
                          "enabled": true
                        },
                        "pyflakes": {
                          "enabled": false
                        },
                        "flake8": {
                          "enabled": true
                        },
                        "pylint": {
                          "enabled": true
                        }
                    }
                }
            }
        }
    }
    
}

0
投票

如果您选择使用

nbqa
但您碰巧有使用
pyspark
作为框架(而不是
python
)的笔记本,则以下命令将无法识别您的笔记本:

nbqa pylint **/*.ipynb

原因是使用 pyspark 的 .ipynb 文件在正文中包含以下元数据:

"metadata": {
   "name": "pyspark"
  }

这会阻止 nbqa 将其识别为 python 类型。解决方案是简单地将“pyspark”的值替换为“python”,这是一个执行此操作的 shell 脚本(您可能需要安装

jq
):

for i in $(find . -type f -name "*.ipynb");
  do jq '.metadata.language_info.name="python"' "$i" > "$i".ipynb;
  nbqa pylint "$i".ipynb -f colorized --fail-under=7;
  rm "$i".ipynb;
done;

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