我有一个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
答案 0 :(得分:0)
可能你需要
from __future__ import absolute_import
使您的代码与Python 3.x样式导入兼容。
或者尝试删除“点”:from decoder import JSONDecoder
。它应该在Python 2.6中工作。不确定Jython。
编辑:在评论中找到答案:Portable json module in jython
答案 1 :(得分:0)
从bash脚本运行python脚本时,我有相同的SyntaxError。解决方案是指定PYTHONPATH,例如PYTHONPATH = /usr/local/lib/python2.7。我还指定了在运行python脚本时使用的python,例如: / usr / local / bin / python my_python_script.py。