【问题标题】:Python syntax error running freshly installed `meld`运行新安装的`meld`的Python语法错误
【发布时间】:2016-09-05 01:11:54
【问题描述】:

我正在安装 meld as described here:

sudo yum install intltool itstool gir1.2-gtksource-3.0 libxml2-utils

但是,当我尝试运行 meld 时,会出现此错误:

File "/usr/bin/meld", line 47
  print _("Meld requires %s or higher.") % modver
        ^

确实/usr/bin/meld 有这个代码:

def missing_reqs(mod, ver):
    modver = mod + " " + ".".join(map(str, ver))
    print _("Meld requires %s or higher.") % modver
    sys.exit(1)

我使用的是 CentOS 6.7,Python 版本 3.3.5。

你能告诉我我在这里做错了什么吗?


编辑:

这是命令行,逐字逐句:

$ meld
  File "/usr/bin/meld", line 47
    print _("Meld requires %s or higher.") % modver
          ^
SyntaxError: invalid syntax

这是meld 脚本的一部分:

import sys
if "--pychecker" in sys.argv:
    sys.argv.remove("--pychecker")
    import os
    os.environ['PYCHECKER'] = "--no-argsused --no-classattr --stdlib"
        #'--blacklist=gettext,locale,pygtk,gtk,gtk.keysyms,popen2,random,difflib,filecmp,tempfile'
    import pychecker.checker
#
# i18n support
#
sys.path[0:0] = [ "/usr/share/meld"
]
import paths
import gettext
_ = gettext.gettext

gettext.bindtextdomain("meld", paths.locale_dir())
gettext.textdomain("meld")

# Check requirements: Python 2.4, pygtk 2.8
pyver = (2,4)
pygtkver = (2,8,0)

def missing_reqs(mod, ver):
    modver = mod + " " + ".".join(map(str, ver))
    print _("Meld requires %s or higher.") % modver
    sys.exit(1)

if sys.version_info[:2] < pyver:
    missing_reqs("Python", pyver)

【问题讨论】:

  • @EricRenouf:包含脚本。完整的回溯具有上述行加上导入语句。
  • 这是 python 2 的语法,不是 python 3
  • @EricRenouf:哎哟!我没有意识到 Python 3 破坏了向后兼容性。那么现在呢?
  • 你可能已经安装了 python 2,如果是这样运行它。

标签: centos yum python


【解决方案1】:

printpython2 中的一个语句,就像您的脚本一样:

print _("Meld requires %s or higher.") % modver

但是您正在使用 python3 解释脚本,它没有 print 语句,而是具有 print() 函数。

您可以尝试将所有print 替换为print(),希望不会有其他问题,这无论如何都不是一个好的解决方案。

最好只安装python2:

sudo yum install python2

并使用python2 作为解释器。

【讨论】:

  • 好吧,我的机器上安装了一堆依赖于 python 3 的工具。安装 python 2 不会影响它们,因为#!python 会突然从调用 python 3 变为 python 2?
  • @Michael 不是真的,您可以通过其路径调用 python2,例如/usr/bin/python2..它不应该删除python到python3的当前符号链接..如果你偏执,你可以安装在virtualenv中..
  • 谢谢,有帮助。
猜你喜欢
  • 1970-01-01
  • 2014-11-16
  • 2015-03-10
  • 2012-05-27
  • 2010-10-29
  • 2014-10-25
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多