我想在使用 Jupyter-Notebook 时运行 Pylint 或任何等效程序。有没有办法以这种方式安装和运行 Pylint?
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
更具体地回答有关
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
文件配置这些选项)
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
}
}
}
}
}
}
}
如果您选择使用
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;