ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

ModuleNotFoundError: No module named ‘formatter‘

ModuleNotFoundError: No module named ‘formatter‘

当你在使用Python时,如果遇到 ModuleNotFoundError: No module named 'formatter' 的错误,这通常表示你的代码中引用了一个名为 'formatter' 的模块,但是Python解释器无法找到这个模块。

这个问题发生在Ubuntu22.04上安装python2.7后,通过repo同步源代码的时候出现的。


分析:formatter已在python3.4+标记成废弃接口,就算你按照网上教程添加这个模块也无法解决。

经过查询资料,https://gerrit-review.googlesource.com/c/git-repo/+/303282
有提供的解决方法:


实际操作如下:

查看repo报错信息,找到help.py的具体路径,例如: .repo/repo/subcmds/help.py

然后给help.py打上图的补丁即可解决问题。

打补丁后的文件如下:
 

# -*- coding:utf-8 -*-
#
# Copyright (C) 2008 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.from __future__ import print_function
import re
import sys
import textwrapfrom subcmds import all_commands
from color import Coloring
from command import PagedCommand, MirrorSafeCommand, GitcAvailableCommand, GitcClientCommand
import gitc_utilsclass Help(PagedCommand, MirrorSafeCommand):common = FalsehelpSummary = "Display detailed help on a command"helpUsage = """
%prog [--all|command]
"""helpDescription = """
Displays detailed usage information about a command.
"""def _PrintCommands(self, commandNames):"""Helper to display |commandNames| summaries."""maxlen = 0for name in commandNames:maxlen = max(maxlen, len(name))fmt = '  %%-%ds  %%s' % maxlenfor name in commandNames:command = all_commands[name]()try:summary = command.helpSummary.strip()except AttributeError:summary = ''print(fmt % (name, summary))def _PrintAllCommands(self):print('usage: repo COMMAND [ARGS]')print('The complete list of recognized repo commands are:')commandNames = list(sorted(all_commands))self._PrintCommands(commandNames)print("See 'repo help <command>' for more information on a "'specific command.')def _PrintCommonCommands(self):print('usage: repo COMMAND [ARGS]')print('The most commonly used repo commands are:')def gitc_supported(cmd):if not isinstance(cmd, GitcAvailableCommand) and not isinstance(cmd, GitcClientCommand):return Trueif self.manifest.isGitcClient:return Trueif isinstance(cmd, GitcClientCommand):return Falseif gitc_utils.get_gitc_manifest_dir():return Truereturn FalsecommandNames = list(sorted([namefor name, command in all_commands.items()if command.common and gitc_supported(command)]))self._PrintCommands(commandNames)print("See 'repo help <command>' for more information on a specific command.\n""See 'repo help --all' for a complete list of recognized commands.")def _PrintCommandHelp(self, cmd, header_prefix=''):class _Out(Coloring):def __init__(self, gc):Coloring.__init__(self, gc, 'help')self.heading = self.printer('heading', attr='bold')self.wrap = Truedef _PrintSection(self, heading, bodyAttr):try:body = getattr(cmd, bodyAttr)except AttributeError:returnif body == '' or body is None:returnif not self._first:self.nl()self._first = Falseself.heading('%s%s', header_prefix, heading)self.nl()self.nl()me = 'repo %s' % cmd.NAMEbody = body.strip()body = body.replace('%prog', me)# Extract the title, but skip any trailing {#anchors}.asciidoc_hdr = re.compile(r'^\n?#+ ([^{]+)(\{#.+\})?$')for para in body.split("\n\n"):if para.startswith(' '):self.write('%s', para)self.nl()self.nl()continuem = asciidoc_hdr.match(para)if m:self.heading('%s%s', header_prefix, m.group(1))self.nl()self.nl()continuelines = textwrap.wrap(para.replace('  ', ' '), width=80,break_long_words=False, break_on_hyphens=False)for line in lines:self.write('%s', line)self.nl()self.nl()out = _Out(self.manifest.globalConfig)out._PrintSection('Summary', 'helpSummary')cmd.OptionParser.print_help()out._PrintSection('Description', 'helpDescription')def _PrintAllCommandHelp(self):for name in sorted(all_commands):cmd = all_commands[name]()cmd.manifest = self.manifestself._PrintCommandHelp(cmd, header_prefix='[%s] ' % (name,))def _Options(self, p):p.add_option('-a', '--all',dest='show_all', action='store_true',help='show the complete list of commands')p.add_option('--help-all',dest='show_all_help', action='store_true',help='show the --help of all commands')def Execute(self, opt, args):if len(args) == 0:if opt.show_all_help:self._PrintAllCommandHelp()elif opt.show_all:self._PrintAllCommands()else:self._PrintCommonCommands()elif len(args) == 1:name = args[0]try:cmd = all_commands[name]()except KeyError:print("repo: '%s' is not a repo command." % name, file=sys.stderr)sys.exit(1)cmd.manifest = self.manifestself._PrintCommandHelp(cmd)else:self._PrintCommandHelp(self)

通过以上方法,你有望解决 ModuleNotFoundError: No module named 'formatter' 的问题。

返回列表