Python PDM + 使用 pylint 预提交:找不到导入
Python PDM + pre-commit using pylint: imports cannot be found
背景
我正在整理一些遗留代码。
我使用 PDM 来管理依赖项,它将所有依赖包放在 repo 根级别正下方的 __pypackages__
文件夹中。 PDM 还使用相对较新的 pyproject.toml
包配置文件。
我正在尝试采用 pre-commit
Git 挂钩,这样我就可以在尝试提交、合并、and/or 创建 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__
。 None 个模块可以导入,但为了清楚起见我限制了输出。
我可以 pdm run ...
一切正常,VS Code 可以正常查看模块。但是 pylint
找不到它,因为它找不到这个 __pypackages__
文件夹。
您可以通过更新扩展使用的 PYTHONPATH
环境变量来解决这个问题,方法是在您的工作区(项目文件夹)中创建一个名为 .env
的文件并添加以下条目:
PYTHONPATH=D:/commonScripts
注意:也支持相对路径。
有关 .env
文件的更多信息,请参见此处 https://code.visualstudio.com/docs/python/environments#_environment-variable-definitions-file
背景
我正在整理一些遗留代码。
我使用 PDM 来管理依赖项,它将所有依赖包放在 repo 根级别正下方的 __pypackages__
文件夹中。 PDM 还使用相对较新的 pyproject.toml
包配置文件。
我正在尝试采用 pre-commit
Git 挂钩,这样我就可以在尝试提交、合并、and/or 创建 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__
。 None 个模块可以导入,但为了清楚起见我限制了输出。
我可以 pdm run ...
一切正常,VS Code 可以正常查看模块。但是 pylint
找不到它,因为它找不到这个 __pypackages__
文件夹。
您可以通过更新扩展使用的 PYTHONPATH
环境变量来解决这个问题,方法是在您的工作区(项目文件夹)中创建一个名为 .env
的文件并添加以下条目:
PYTHONPATH=D:/commonScripts
注意:也支持相对路径。
有关 .env
文件的更多信息,请参见此处 https://code.visualstudio.com/docs/python/environments#_environment-variable-definitions-file