如何让PyLint找到命名空间包?

3 投票
2 回答
2401 浏览
提问于 2025-04-18 18:18

我有一个虚拟环境,在里面安装了两个包,它们都使用了company.project_name这个命名空间。所以第一个包可以通过company.project_name.one来导入,第二个包则是通过company.project_name.two来导入。

现在的问题是,我似乎无法对这两个包运行PyLint。如果我输入:

$ pylint company.project_name.one

我得到的结果是:

************* Module company.project_name.one
F:  1, 0: No module named project_name.one(fatal)

我怀疑我可能做错了什么。有没有正确的方法来做到这一点呢?

补充说明:我应该明确一点,company.project_namecompany是命名空间包,而不是普通的包。

2 个回答

2

好的,看起来PyLint对这样声明的命名空间包不太满意:

__import__('pkg_resources').declare_namespace(__name__)

我把它改成了下面这样,然后一切都正常了:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
2

在命令行中使用 pylint company/project_name/one.py 这个命令。

~$ pylint foo2.foo.py
No config file found, using default configuration
************* Module foo2.foo.py
F:  1, 0: No module py in foo2.foo (fatal)

~$ pylint foo2/foo.py

No config file found, using default configuration
************* Module foo2.foo
C:  1, 0: Black listed name "foo" (blacklisted-name)
C:  1, 0: Missing module docstring (missing-docstring)
C:  1, 0: Invalid argument name "a" (invalid-name)
C:  1, 0: Invalid argument name "b" (invalid-name)
W:  1,13: Unused argument 'a' (unused-argument)
W:  1,16: Unused argument 'b' (unused-argument)


Report
======
3 statements analysed.

etc............

这里没有名为 company 的文件夹,所以你需要像切换目录一样使用 /,就像你输入 cd foo2/ 来进入一个文件夹。

撰写回答