在python和pylint中添加sys.path的路径

时间:2017-06-24 04:41:25

标签: python pylint

因此。我知道这个问题似乎已被要求死亡,但没有一个答案似乎解决了想要做的事情。

我在另一个目录中有一个库,我希望将其包含在我运行的一组其他项目中。我不希望该库在运行python时每隔添加 ..

所以,我已经做了什么就是我的python代码:

import sys
sys.path.append("/tmp/demo/src/my-lib")
import MyClass

这很好用。但是,既然我已经发现并喜欢pylint,那就抱怨了

E:  7, 0: Unable to import 'MyClass' (import-error)
C:  7, 0: Import "import MyClass" should be placed at the top of the module (wrong-import-position)

我知道我可以用指令禁用import-error和错误导入位置(或者只是将它放入.pylintrc ......)但是,我宁愿不这样做。我想知道向sys.path添加路径的“正确”方法,该路径不是全局所有我的项目,只是添加到使用该项目的项目的子集中特别的图书馆。

这可能吗?

2 个答案:

答案 0 :(得分:6)

你可以使用" init hook"对于pylint。请参阅此答案:https://stackoverflow.com/a/3065082/4323

this statement from pylint's bug tracker

  

我们可能不会自动支持这一点。但是现在我们支持手动添加路径,虽然以一种更加繁琐的方式,通过``--init-hook =" import sys; sys.path.append(...)"

答案 1 :(得分:0)

这是一篇旧帖子,但在搜索了一段时间后,我无法真正为我的问题找到简单的解决方案,所以也许这种解决方法对其他人也有用。最近我在 Visual Studio Code 中使用 python linter 时遇到了类似的问题:每次我在 VSC 中保存我的 python 文件时,linter 都会将 sys.import 放在导入代码的后面,因此我的模块无法加载。

我知道它可以通过更改 PYTHONPATH 等和通过更改 linter 配置文件来解决,但在我的情况下,我无法更改所有这些,因为该模块是另一个应用程序的一部分。

作为一种解决方法,我通过执行以下操作解决了 lint 错误:

import sys

if 1==1:
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "lib"))
    import mylib

这阻止了 linter 的抱怨,也阻止了 VSC 格式化程序重新安排我的导入规则。