指定known_first_party和src_path后Isort仍误将自有模块归为第三方导入
解决Isort将同目录Python模块误判为第三方导入的问题
问题场景
项目目录结构:
. └── Home/ └── project/ ├── data/ │ ├── dataset.py │ └── data_utils.py ├── src/ │ └── main.py ├── .pre-commit-config.yaml └── .isort.cfg
通过.env设置PYTHONPATH:PYTHONPATH="$(pwd):$(pwd)/src:$(pwd)/data",方便data目录内模块互相导入。但在data_utils.py中使用from dataset import Dataset时,Isort始终将该导入归为第三方导入分组,尝试以下配置均无效:
known_first_party=data_utils- 同时设置
known_first_party=data_utils和src_paths=data
解决方案
1. 修正.isort.cfg配置
Isort需要明确识别整个data目录为第一方源码目录,而非单个模块。修改.isort.cfg为:
[settings] # 指定项目根目录为源码路径,自动识别所有子目录模块 src_paths = . # 显式声明第一方模块目录,配合src_paths使用更稳妥 known_first_party = data, src
其中src_paths = .表示以project/目录为源码根,Isort会自动识别该目录下所有子目录中的模块为第一方。
2. 确保pre-commit钩子读取正确的PYTHONPATH
pre-commit的钩子运行在独立环境中,可能无法读取你通过dotenv加载的环境变量。直接在.pre-commit-config.yaml的Isort钩子中配置PYTHONPATH:
repos: - repo: https://github.com/PyCQA/isort rev: 5.12.0 # 替换为你当前依赖的Isort版本 hooks: - id: isort env: PYTHONPATH: "."
3. 验证效果
修改配置后,执行以下命令重新运行pre-commit钩子:
pre-commit run isort --all-files
此时from dataset import Dataset应该会被正确归类到第一方导入分组中。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

