3

There are two instances running uwgsi and nginx servers. Each hosts a Flask application. Both are running on a Python 2.7.3 path. One of the servers throws an ImportError for the "import simplejson" statement. The interpreter on both servers will accept this import statement without complaint.

Here's the source of application A:

  1 from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash, views                                                                                                   
  2 import sys
  3 print sys.version
  4 print sys.path
  5 
  6 import os
  7 import functools
  8 import urllib,urllib2
  9 import simplejson
 10 from datetime import datetime, timedelta

And the source of application B:

  1 from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash, views                                                                                                   
  2 
  3 import sys
  4 print sys.version          
  5 print sys.path             
  6 
  7 import simplejson  
  8 
  9 import functools

Here's the sys.version and sys.path log output of server A:

2.7.3 (default, Aug  1 2012, 05:25:23) 
[GCC 4.6.3]
['/srv/www/A/env/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg',     
'/srv/www/A/env/local/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg',
'/srv/www/A/env/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg', 
'/srv/www/A/env/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg', 
'/srv/www/A/env/lib/python2.7', 
'/srv/www/A/20120910/src', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-linux2', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/srv/www/A/env/local/lib/python2.7/site-packages', 
'/srv/www/A/env/lib/python2.7/site-packages']
WSGI app 0 (mountpoint='notimportant.com|') ready in 1 seconds on interpreter 0x1b20420 pid: 11069

Here's the sys.version and sys.path log output of server B:

2.7.3 (default, Aug  1 2012, 05:25:23) 
[GCC 4.6.3]
['/srv/www/B/env/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg', 
'/srv/www/B/env/local/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg', 
'/srv/www/B/env/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg', 
'/srv/www/B/env/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg', 
'/srv/www/B/env/lib/python2.7', 
'/srv/www/B/20130105/src', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-linux2', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/srv/www/B/env/local/lib/python2.7/site-packages', 
'/srv/www/B/env/lib/python2.7/site-packages']

Traceback (most recent call last):
  File "/srv/www/B/20130105/src/B.py", line 7, in <module>
    import simplejson
ImportError: No module named simplejson
unable to load app 0 (mountpoint='notimportant.com|') (callable not found or import error)

Any constructive ideas will be appreciated.

4Z4T4R
  • 2,340
  • 2
  • 26
  • 45

1 Answers1

6

simplejson is an external library; it is bundled with Python 2.6 and up as the json module.

Just use import json instead of import simplejson, or install simplejson on server B too.

If you replace your simplejson import with json, remember to fix any references in the file. Alternatively, import it like this:

try:
    import simplejson
except ImportError:
    import json as simplejson

and it'll use the stdlib json module, renamed, and all your references to simplejson will continue to work.

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
  • Of course, you'll need to change any statements where you use `simplejson` to use `json` instead: e.g. `simplejson.load` -> `json.load`. Alternatively, `import json as simplejson`, but that last one should be considered a temporary hack at best. – mgilson Jan 08 '13 at 18:14
  • Frankly, I got the relationship between json and simplejson reversed in my mind. I thought json was external and simplejson internal to Py2.6+. I also fixed the problem by sourcing my virtualenv and typing "pip install simplejson"... THANK YOU ALL. – 4Z4T4R Jan 08 '13 at 22:00