PyLint "无法导入"错误 - 如何设置PYTHONPATH?

331 投票
35 回答
470092 浏览
提问于 2025-04-15 16:59

我在Windows的Wing IDE里运行PyLint。我的项目里有一个子目录(包),在这个包里我从顶层目录导入了一个模块,也就是:

__init__.py
myapp.py
one.py
subdir\
    __init__.py
    two.py

two.py里,我写了import one,这在运行时没问题,因为顶层目录(也就是运行myapp.py的地方)在Python的路径里。但是,当我在two.py上运行PyLint时,它给我报了一个错:

F0401: Unable to import 'one'

我该怎么解决这个问题呢?

35 个回答

76

这个问题可以通过在虚拟环境(venv)中配置pylint的路径来解决:

{
    "python.pythonPath": "venv/bin/python",
    "python.linting.pylintPath": "venv/bin/pylint"
}
136

init-hook 中修改路径的解决办法不错,但我不喜欢必须在这里添加绝对路径的做法,因为这样我就无法在项目的开发者之间共享这个 pylintrc 文件。对我来说,使用相对路径的 pylintrc 文件的解决方案效果更好:

[MASTER]
init-hook="from pylint.config import find_pylintrc; import os, sys; sys.path.append(os.path.dirname(find_pylintrc()))"

请注意,pylint.config.PYLINTRC 也存在,并且它的值和 find_pylintrc() 是一样的。

261

我知道有两个方法可以解决这个问题。

第一个方法是修改 PYTHONPATH 这个环境变量,把你的模块所在目录的上一级目录加进去。

第二个方法是编辑 ~/.pylintrc 文件,把你的模块上一级目录加进去,像这样:

[MASTER]
init-hook='import sys; sys.path.append("/path/to/root")'

(或者在其他版本的 pylint 中,初始化钩子需要你把 [General] 改成 [MASTER])

这两种方法都应该能解决问题。

撰写回答