因此。我知道这个问题似乎已被要求死亡,但没有一个答案似乎解决了我想要做的事情。
我在另一个目录中有一个库,我希望将其包含在我运行的一组其他项目中。我不希望该库在运行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添加路径的“正确”方法,该路径不是全局到所有我的项目,只是添加到使用该项目的项目的子集中特别的图书馆。
这可能吗?
答案 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 格式化程序重新安排我的导入规则。