【发布时间】:2021-11-16 14:04:20
【问题描述】:
背景
我正在整理一些遗留代码。
我使用PDM 来管理依赖项,它将所有依赖包放在repo 根级别下的__pypackages__ 文件夹中。 PDM 还使用相对较新的pyproject.toml 包配置文件。
我正在尝试采用pre-commit Git 挂钩,以便在尝试提交、合并和/或创建 PR 之前自动检查格式和样式。
我要求 pre-commit 目前只使用几个 Python 工具:pylint 和 black。
问题
大部分工具集都可以很好地协同工作。但是,pylint 找不到存储在__pypackages__ 文件夹中的任何模块。我读过的大部分内容都建议我更改 $PYTHONPATH 以查找模块。
这个解决方案似乎已经过时了。但是,我不确定如何在整个团队中以稳健的方式做到这一点。我可以更改 Git 挂钩,但每个工程师的 $PYTHONPATH 可能不同,所以这只适用于我的机器。
我希望希望能够在pyproject.toml 文件中添加一些内容,以便pylint 找到它。不过,我不确定要写什么,以便它一般适用于整个团队。类似的东西
[tools.pylint]
pypackages = "./__pypackages__"
有什么想法可以做到这一点吗?
详情
我不确定是否需要更多详细信息,但这里是:
我的行动:
> pre-commit run --all-files # The --all-files flag is just to allow me to test without a commit
Trim Trailing Whitespace.................................................Passed
Fix End of Files.........................................................Passed
Check Yaml...........................................(no files to check)Skipped
Check for added large files..............................................Passed
black....................................................................Passed
pylint...................................................................Failed
- hook id: pylint
- exit code: 30
************* Module testfile
testfile.py:18:0: E0401: Unable to import 'boto3' (import-error)
boto3 在上面提到的__pypackages__ 中。无法导入任何模块,但为了清楚起见,我限制了输出。
我可以pdm run ... 一切正常,并且 VS Code 可以正常查看模块。但是pylint 没有找到它,因为它找不到这个__pypackages__ 文件夹。
【问题讨论】:
-
我对 PDM 了解不多,但您是否尝试过使用 pdm 安装 pylint,然后使用 pylint 的系统挂钩?您的 pre-commit conf 未显示,这很重要,因为 pylint 需要与您的依赖项位于同一环境中。
-
可以编写 Python 代码使 pylint 无法 处理它,因为 pylint 实际上并没有 运行 它所以任何秘密都会改变你've made to
sys.pathin a module 不要发生。然而,Pylint 确实尝试通过模拟普通 Python 在正常情况下对普通import指令所做的操作来处理正常的导入情况。当您超出这些规范时,这些东西就会失败。这可能不是问题,但值得考虑。 -
这是有道理的,关于
sys.path。但我想令人沮丧的是,__pypackages__文件夹 is 在根 repo 中,并且 is 是公认的 Python 包结构的一部分。所以 pylint 应该知道将根路径__pypackages__视为检查导入的位置,就像它检查任何包含__init__.py文件的文件夹一样。我想我只需要等待 pylint 赶上 PEP 582。
标签: python pylint pre-commit.com