【问题标题】:Python import Error: from .decoder import JSONDecoder: invalid syntaxPython 导入错误:从 .decoder 导入 JSONDecoder:语法无效
【发布时间】:2014-12-02 21:46:08
【问题描述】:

我有一个 python 模块 (getActiveLocation.py)。它基本上是进行一个 http POST 调用,处理它的响应并返回它。

它利用了 json 模块。我在 RedHat Linux 上运行 python 2.6。该模块在独立运行时工作正常。 当模块 getActiveLocation.py 独立运行时,sys.path 是

['/current_directory/','/usr/lib64/python26.zip','/usr/lib64/python2.6','/usr/lib64/python2.6/lib-tk','/usr/lib64/python2.6/site-packages','/usr/lib/python2.6/site-packages']

json 模块存在于 /usr/lib64/python2.6/ 目录中。

这个 python 模块 (getActiveLocation.py) 是在 jython 脚本 (schedule_location.py) 中导入的,当 jython 脚本运行时,它会给出 json 模块的导入错误。

ImportError: no module named json

看起来像是 sys.path 问题。

我尝试通过以下方式手动将 /usr/lib64/python2.6 添加到 schedule_location.py 中的 sys.path:

sys.path.append('/usr/lib64/python2.6')

然后错误变为:

File "/usr/lib64/python2.6/json/__init__.py", line 108
    from .decoder import JSONDecoder
         ^
SyntaxError: invalid syntax

知道为什么会发生此错误吗?感谢您的帮助。

瓦西里,

我在一个无法控制的生产系统上!所以升级 jython 对我来说不是一个直接的解决方案:(。

我使用了Portable json module in jython中的评论中提到的simplejson

但在这里,当我在 python 中运行它时它再次工作。但是当从 jython 运行时,它会给出:

File "schedule_location.py", line 21, in ? File "getActiveLocation.py", line 4, in ? File "simplejson/__init__.py", line 113, in ? File "simplejson/decoder.py", line 7 from .compat import fromhex, b, u, text_type, binary_type, PY3, unichr
^ SyntaxError: invalid syntax

为了克服这个问题,我使用了:

from __future__ import absolute_import

但它给了:

File "schedule_location.py", line 21, in ?
File "getActiveLocation.py", line 1
SyntaxError: future feature absolute_import is not defined

我知道这需要 python 2.5 或更高版本。但我使用的是 Python 2.6

【问题讨论】:

  • 你使用的是什么版本的jython?
  • Yoel,我不太清楚如何检查 jython 版本。我拥有的 JRE 是 1.6.0_24 版。所以我想即使是 jython 版本也是一样的。
  • jython --version 的输出是什么?另外,在jython 脚本中执行时import sys; sys.version 的输出是什么?
  • Yoel,我不直接执行 jython。我的路径中没有它。所以无法获得 jython --version。我从一个 shell 脚本中调用它,如下所示: out=java -cp "$SYS_PATH" -Dpython.path=${SCRIPT_PATH} weblogic.WLST -skipWLSModuleScanning -i ${SCRIPT_PATH}/schedule_location.py 和一个 import sys; print sys.version 给我:2.6.6 (r266:84292, Feb 22 2013, 00:00:18) [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)]
  • 您能否将您的jython 版本升级到具有内置json 模块的版本?我认为这比强迫它与cpython 的json 模块一起工作要简单得多。

标签: python json python-2.6


【解决方案1】:

从 bash 脚本运行 python 脚本时,我遇到了相同的 SyntaxError。解决方案是指定 PYTHONPATH,例如PYTHONPATH = /usr/local/lib/python2.7。我还指定了在运行 python 脚本时使用哪个 python,例如/usr/local/bin/python my_python_script.py。

【讨论】:

    【解决方案2】:

    也许你需要

    from __future__ import absolute_import
    

    使您的代码与 Python 3.x 样式导入兼容。 或者尝试删除“点”:from decoder import JSONDecoder。它应该在 Python 2.6 中工作。不确定 Jython。

    编辑:在评论中找到答案:Portable json module in jython

    【讨论】:

    • 感谢瓦西里的回复。我试过导入absolute_import。但它给了我: SyntaxError: future feature absolute_import is not defined 而且从 init.py 中删除“点”是一个好主意,它是 JSON 模块中标准 python 文件的一部分?
    • 使用其他解释器的标准模块也不是一个好主意。将 Jython 与它自己的 json 模块一起使用会更好。我检查了最新的稳定 Jython 2.5.3,它不包含 json 模块。但是最新的 Jython 2.7 beta3 可以!在这里查看:search.maven.org/remotecontent?filepath=org/python/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    相关资源
    最近更新 更多