【问题标题】:Python PDM + pre-commit using pylint: imports cannot be foundPython PDM + 使用 pylint 预提交:找不到导入
【发布时间】:2021-11-16 14:04:20
【问题描述】:

背景

我正在整理一些遗留代码。

我使用PDM 来管理依赖项,它将所有依赖包放在repo 根级别下的__pypackages__ 文件夹中。 PDM 还使用相对较新的pyproject.toml 包配置文件。

我正在尝试采用pre-commit Git 挂钩,以便在尝试提交、合并和/或创建 PR 之前自动检查格式和样式。

我要求 pre-commit 目前只使用几个 Python 工具:pylintblack

问题

大部分工具集都可以很好地协同工作。但是,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.path in a module 不要发生。然而,Pylint 确实尝试通过模拟普通 Python 在正常情况下对普通 import 指令所做的操作来处理正常的导入情况。当您超出这些规范时,这些东西就会失败。这可能不是问题,但值得考虑。
  • 这是有道理的,关于sys.path。但我想令人沮丧的是,__pypackages__ 文件夹 is 在根 repo 中,并且 is 是公认的 Python 包结构的一部分。所以 pylint 应该知道将根路径 __pypackages__ 视为检查导入的位置,就像它检查任何包含 __init__.py 文件的文件夹一样。我想我只需要等待 pylint 赶上 PEP 582。

标签: python pylint pre-commit.com


【解决方案1】:

您可以通过更新扩展使用的PYTHONPATH 环境变量、在您的工作区(项目文件夹)中创建一个名为.env 的文件并添加以下条目来解决此问题:

PYTHONPATH=D:/commonScripts

注意:也支持相对路径。 关于.env文件的更多信息可以在这里找到https://code.visualstudio.com/docs/python/environments#_environment-variable-definitions-file

【讨论】:

  • 太好了,谢谢!很高兴听到作者本人的消息! (顺便说一句,我已经成为我公司的 PDM 传播者。我喜欢它!)
猜你喜欢
  • 2020-12-06
  • 2019-07-28
  • 2020-07-28
  • 2021-05-16
  • 2020-06-30
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多