Search code examples
pythonjsoncx-freeze

cx_freeze can't import JSONDecoder


The following python script runs fine:

#!/usr/bin/python
import simplejson

print str(simplejson.loads('{"a": "abc"}'))

Then after freezing it:

cxfreeze test.py --target-dir dist

Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.7/cx_Freeze/initscripts/Console.py", line 29, in <module>
    exec code in m.__dict__
  File "test.py", line 3, in <module>
    import simplejson as json
  File "/usr/lib/python2.7/dist-packages/simplejson/__init__.py", line 111, in <module>
    from decoder import JSONDecoder, JSONDecodeError
  File "/usr/lib/python2.7/dist-packages/simplejson/decoder.py", line 29, in <module>
    NaN, PosInf, NegInf = _floatconstants()
  File "/usr/lib/python2.7/dist-packages/simplejson/decoder.py", line 21, in _floatconstants
    _BYTES = '7FF80000000000007FF0000000000000'.decode('hex')
LookupError: unknown encoding: hex

This wouldn't help:

cxfreeze test.py --target-dir dist --include-modules simplejson

And neither did switching from simplejson to json help.

It seems to give no errors when it is freezing the simplejson part:

P simplejson                /usr/lib/python2.7/dist-packages/simplejson/__init__.py
m simplejson._speedups      /usr/lib/python2.7/dist-packages/simplejson/_speedups.so
m simplejson.decoder        /usr/lib/python2.7/dist-packages/simplejson/decoder.py
m simplejson.encoder        /usr/lib/python2.7/dist-packages/simplejson/encoder.py
m simplejson.ordered_dict   /usr/lib/python2.7/dist-packages/simplejson/ordered_dict.py
m simplejson.scanner        /usr/lib/python2.7/dist-packages/simplejson/scanner.py

Solution

  • (Reposting as an answer)

    You need to include the module encodings.hex_codec. I've opened an issue to get this done automatically.