如果你想从当前的模块/文件中走出来pylint
寻找模块的根目录,这将做到这一点。
[MASTER]
init-hook=sys.path += [os.path.abspath(os.path.join(os.path.sep, *sys.argv[-1].split(os.sep)[:i])) for i, _ in enumerate(sys.argv[-1].split(os.sep)) if os.path.isdir(os.path.abspath(os.path.join(os.path.sep, *sys.argv[-1].split(os.sep)[:i], '.git')))][::-1]
如果你有一个 python 模块~/code/mymodule/
,有一个像这样的顶级目录布局
~/code/mymodule/
├── .pylintrc
├── mymodule/
│ └── src.py
└── tests/
└── test_src.py
然后这将添加到您的 python 路径并允许 pylint 在您的 IDE中~/code/mymodule/
运行,即使您正在导入mymodule.src
.tests/test_src.py
您可以将检查换成 a ,.pylintrc
但是当涉及到 python 模块的根目录时,通常需要一个 git 目录。
在你问之前
使用的答案import sys, os; sys.path.append(...)
缺少可以证明我的答案格式合理的东西。我通常不会那样编写代码,但在这种情况下,您会遇到 pylintrc 配置解析器和评估器的限制。它实际上是在 init_hook 回调的上下文中运行exec
的,因此任何尝试 import pathlib
、使用多行语句、将某些内容存储到变量中等都将不起作用。
我的代码的一种不那么恶心的形式可能如下所示:
import os
import sys
def look_for_git_dirs(filename):
has_git_dir = []
filename_parts = filename.split(os.sep)
for i, _ in enumerate(filename_parts):
filename_part = os.path.abspath(os.path.join(os.path.sep, *filename_parts[:i]))
if os.path.isdir(os.path.join(filename_part, '.git')):
has_git_dir.append(filename_part)
return has_git_dir[::-1]
# don't use .append() in case there's < 1 or > 1 matches found
sys.path += look_for_git_dirs(sys.argv[-1])
我希望我可以使用pathlib.Path(filename).parents
它会使事情变得更容易。