在使用 Visual Studio 代码和 autopep8 导入之前允许语句

Allow statements before imports with Visual Studio Code and autopep8

我将 Visual Studio 代码与 Python 插件和 autopep8 一起使用:

"editor.formatOnSave": true

我有需要导入的本地包,所以我有类似的东西:

import sys
sys.path.insert(0, '/path/to/packages')
import localpackage

但是当我保存时,Visual Studio Code/autopep8 将所有导入语句移到代码之前,所以 Python 找不到我的本地包。

import sys
import localpackage
sys.path.insert(0, '/path/to/packages')

如何告诉Visual Studio Code/autopep8在导入前加个语句是可以的,还是有更正确的导入本地包的方法?

作为一种解决方法,如果您在 if 语句中导入,看起来没问题:

import sys

sys.path.insert(0, '/path/to/packages')
if 'localpackage' not in sys.modules:
    import localpackage
  1. 打开设置

  2. 搜索 autopep8。您应该会看到以下结果:

  3. 点击第一个选项下的“在settings.json中编辑”

  4. 将以下参数添加到用户设置 JSON 文件:

    "python.formatting.autopep8Args": ["--ignore", "E402"]
    

这告诉 autopep8 忽略错误 402,即:“模块级导入不在文件顶部”(这里是 pep8 中的 list of errors)

您可以使用相同的方法更改任何 autopep8 设置。例如,如果你只想修复缩进,你可以使用 "python.formatting.autopep8Args": ["--select", "E1"]

autopep8 readme 提供了有关可用选项的更多信息。

如果您不想普遍禁用导入排序,而只是针对特定行禁用它,您可以在每行末尾使用以下编译指示:

# noqa

# nopep8

就像你的例子一样:

import sys # noqa
sys.path.insert(0, '/path/to/packages') # noqa
import localpackage