jmespath / jmespath.py

JMESPath is a query language for JSON.

Home Page:http://jmespath.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ImportError: cannot import name 'loads' from 'json' (unknown location)

vshuraeff opened this issue · comments

something wrong if I try use module from boto3 under python 3.7.5 .
I think its because built-in module json now does not support method loads.

also it would be cool of jmespath can detect ujson automatically

Traceback (most recent call last):
  File "~/work/route53/route53_sync.py", line 5, in <module>
    import boto3
  File "~/work/venv/lib/python3.7/site-packages/boto3/__init__.py", line 16, in <module>
    from boto3.session import Session
  File "~/work/venv/lib/python3.7/site-packages/boto3/session.py", line 17, in <module>
    import botocore.session
  File "~/work/venv/lib/python3.7/site-packages/botocore/session.py", line 31, in <module>
    import botocore.client
  File "~/work/venv/lib/python3.7/site-packages/botocore/client.py", line 16, in <module>
    from botocore import waiter, xform_name
  File "~/work/venv/lib/python3.7/site-packages/botocore/waiter.py", line 13, in <module>
    import jmespath
  File "~/work/venv/lib/python3.7/site-packages/jmespath/__init__.py", line 1, in <module>
    from jmespath import parser
  File "~/work/venv/lib/python3.7/site-packages/jmespath/parser.py", line 30, in <module>
    from jmespath import lexer
  File "~/work/venv/lib/python3.7/site-packages/jmespath/lexer.py", line 3, in <module>
    from json import loads
ImportError: cannot import name 'loads' from 'json' (unknown location)

In our case, it was the file name json.py. renaming the file name fixed the issue

Hi @vshuraeff, as @smitthakkar1 noted, this is due to something in your path overwriting the json namespace. json does provide a loads method in all supported versions of Python.