【问题标题】:flycheck: undefined name 'xrange'flycheck:未定义的名称'xrange'
【发布时间】:2016-09-20 09:49:10
【问题描述】:

我正在运行emacs24,而且我是 emacs 的新手。我正在使用flycheck 检查Python 2.7 中的一些代码。 当我检查语法时,我得到:

error F821 undefined name 'xrange' (python-flake8)

我知道xrange 不在 Python3 中,但在这里我使用的是 Python 2.7。我猜它已配置为在 Python 3 上运行,因为 raw_input 也会产生相同的错误。

我该如何解决这个问题?

【问题讨论】:

    标签: python emacs flake8 flycheck


    【解决方案1】:

    Flycheck 不关心 Python 2 和 Python 3 之间的区别。它运行在 exec-path 中找到的第一个 flake8 可执行文件,在您的情况下,这显然是为 Python 3 安装的 flake8。

    您需要为 Python 2 安装 flake8 并将 Flycheck 指向该可执行文件,方法是将目标目录放入 exec-path 或使用 M-x flycheck-set-checker-executable

    我建议为您的项目使用专用的 Python 2 virtualenv 并制作 Emacs 并将 python-shell-virtualenv-root 设置为 Python 缓冲区中的该目录(例如 Directory Variables)。然后你可以将exec-path 指向那个virtualenv。只需一点点custom Emacs Lisp,您甚至可以自动执行此操作。

    【讨论】:

      【解决方案2】:

      我正在为同样的问题而苦苦挣扎,可以推荐使用我的解决方案:https://github.com/rmuslimov/flycheck-local-flake8。这很简单 - 它会强制 flycheck 使用您的 virtualenv 中正确的 flake8 可执行文件。

      我建议将setup.cfg 添加到您从事的每个python 项目中。 Flake8 有一些可以在那里定义的环境变量。例如这里是我的:

      [metadata]
      name=fastttrace
      version=release.5.9.0
      
      [flake8]
      exclude = tests/*, migrations/*
      ignore = D100,D101,D102,D103,D205,D400,E731
      import-order-style = google
      max-complexity = 15
      

      它允许您在每个项目中拥有单独的 flake8 规则并将它们存储在 repo 中,这是与其他开发人员共享的便捷方式。

      【讨论】:

        猜你喜欢
        • 2015-09-15
        • 1970-01-01
        • 1970-01-01
        • 2019-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-03
        相关资源
        最近更新 更多