jjzjj

python - Flake8 属性错误 : 'module' object has no attribute 'normalize_paths'

coder 2023-08-22 原文

这是我在验证期间 flake8 的输出:

Traceback (most recent call last):
  File "/usr/local/bin/flake8", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python2.7/dist-packages/flake8/main.py", line 25, in main
    flake8_style = get_style_guide(parse_argv=True, config_file=DEFAULT_CONFIG)
  File "/usr/local/lib/python2.7/dist-packages/flake8/engine.py", line 244, in get_style_guide
    options.exclude.extend(pep8.normalize_paths(EXTRA_EXCLUDE))
AttributeError: 'module' object has no attribute 'normalize_paths'

为什么我不能使用它?

最佳答案

这个问题可以通过使用最新版本的 flake8 来解决,特别是 flake8 >= 2.6.0 不依赖于 pep8 模块(Source)。您可以通过 pip 安装它来做到这一点:

$ pip install flake8

应该安装最新版本(目前为 3.5.0)。

哪里出了问题?

此错误告诉您 flake8 确实找到了名为 pep8 的模块,但该模块不包含名为 normalize_paths 的函数。这可能有多种原因,包括安装损坏(应该通过重新安装 flake 和 pep8 来修复)和路径中的 pep8 版本冲突。当您 modify your sys.path 时,后者可能会发生和/或以某种方式设法将名为 pep8 的自己的模块放入您的路径中。这可以小到一个名为 pep8 的文件夹和一个 __init__.py,如本例所示:

$ mkdir /home/me/miniconda3/envs/fl8/lib/python2.7/site-packages/pep8
$ touch /home/me/miniconda3/envs/fl8/lib/python2.7/site-packages/pep8/__init__.py
$ flake8 foo.py

Traceback (most recent call last):
  File "/home/me/miniconda3/envs/fl8/bin/flake8", line 7, in <module>
    from flake8.main import main
  File "/home/me/miniconda3/envs/fl8/lib/python2.7/site-packages/flake8/main.py", line 8, in <module>
    from flake8.engine import get_parser, get_style_guide
  File "/home/me/miniconda3/envs/fl8/lib/python2.7/site-packages/flake8/engine.py", line 11, in <module>
    from flake8.reporter import (multiprocessing, BaseQReport, FileQReport,
  File "/home/me/miniconda3/envs/fl8/lib/python2.7/site-packages/flake8/reporter.py", line 18, in <module>
    class BaseQReport(pep8.BaseReport):
AttributeError: 'module' object has no attribute 'BaseReport'

如您所见,此错误与您的略有不同,但属于同一类型。这可能是由于 pep8 模块中的微小变化所致。

要查看是否一切顺利,您可以检查 python 路径的内容和 pep8 模块的位置。

$ python
>>> import pep8
>>> pep8.__file__
/home/me/miniconda3/envs/fl8/lib/python3.5/site-packages/pep8.py

这会告诉您您的 Python 使用的是哪个 pep8 模块。所以这应该指向您的 Python 发行版中的某处,而不是指向您的本地文件夹之一。如果它确实指向您的文件,这是您的 sys.path 的问题,python 在导入期间检查的路径列表:

>>> import sys
>>> import pprint  # this is only used to make it print pretty
>>> pprint.pprint(sys.path)
['',
 '/home/me/miniconda3/envs/dptest/lib/python35.zip',
 '/home/me/miniconda3/envs/dptest/lib/python3.5',
 '/home/me/miniconda3/envs/dptest/lib/python3.5/plat-linux',
 '/home/me/miniconda3/envs/dptest/lib/python3.5/lib-dynload',
 '/home/me/miniconda3/envs/dptest/lib/python3.5/site-packages',
 '/home/me/miniconda3/envs/dptest/lib/python3.5/site-packages/setuptools-27.2.0-py3.5.egg']

这显示了 Python 在其中搜索 pep8 模块的所有文件夹(从上到下)。因此,如果其中有一条路径确实指向一个您不希望 python 包存在的位置,那可能就是罪魁祸首。

(进一步阅读:reddit thred)

其他可能的解决方案

如果使用最新版本不能解决您的问题,您可以尝试使用 conda 创建一个虚拟环境,您可以在其中安装 flake8 及其所有依赖项,以避免与您的其他部分交互 python 安装。下载conda后新建环境(我的是fl8),激活,安装flake8,使用:

$ conda create -n fl8 python=2.7  # if you insist on python 2.7
$ source activate fl8
(fl8) $ pip install flake8
[...]
$ flake8 foo.py

关于 Emacs

如果您从命令行启动 Emacs,它会使用与您启动它的 shell 相同的环境。因此,为了从环境中使用 flake8,如上,您必须首先激活环境。我在 this tutorial 之后用 elpy 设置了我的 Emacs .为了让它与 conda 一起工作,我还在根环境中安装了 flake 等。

如果您以不同的方式启动 Emacs(例如在 Ubuntu 上使用 M-F2 或从开始菜单),环境可能无法正常工作。我还没有完全理解如何解决这个问题。

关于python - Flake8 属性错误 : 'module' object has no attribute 'normalize_paths' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37544941/

有关python - Flake8 属性错误 : 'module' object has no attribute 'normalize_paths'的更多相关文章

  1. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  4. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  5. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  6. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  7. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  8. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  9. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  10. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

随机推荐