首页 > 解决方案 > Python PDM + 使用 pylint 预提交:找不到导入

问题描述

背景

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

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

我正在尝试采用pre-commitGit 挂钩,以便在尝试提交、合并和/或创建 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__文件夹。

标签: pythonpylintpre-commit.com

解决方案


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

PYTHONPATH=D:/commonScripts

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


推荐阅读