27

我将 Visual Studio Code 与 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
4

2 回答 2

47
  1. 打开设置

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

    在此处输入图像描述

  3. 点击第一个选项下的“Edit in settings.json”

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

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

    在此处输入图像描述

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

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

autopep8 自述文件包含有关可用选项的更多信息。

于 2019-01-03T23:04:30.587 回答
26

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

# noqa

或者

# nopep8

就像你的例子一样:

import sys # noqa
sys.path.insert(0, '/path/to/packages') # noqa
import localpackage
于 2019-07-17T01:56:28.440 回答