manage.py和simplejson调用报错解决

1. 调用manage.py报错

在安装Mathematica的开源替代版Mathics后初始化时,调用manage.py报错:

Traceback (most recent call last):
  File "mathics/manage.py", line 3, in <module>
    from django.core.management import execute_manager
ImportError: cannot import name execute_manager

经搜索后找到解决方法(产生这一错误的原因参见https://docs.djangoproject.com/en/1.4/releases/1.4/#updated-default-project-layout-and-manage-py),需要修改所调用的manage.py。

对Mathics所用的manage.py,修改前的manage.py:

#!/usr/bin/env python

from django.core.management import execute_manager
try:
    import settings  # Assumed to be in the same directory.
except ImportError:
    import sys
    sys.stderr.write(
        """Error: Can't find the file 'settings.py' in the directory containing
%r. It appears you've customized things.\n
You'll have to run django-admin.py, passing it your settings module.
(If the file settings.py does indeed exist, it's causing an ImportError.)\n"""
        % __file__)
    sys.exit(1)

if __name__ == "__main__":
    execute_manager(settings)

    # fix known PyPy bug (see https://bugs.pypy.org/issue1116)
    import gc
    gc.collect()
    gc.collect()

修改后的manage.py:

#!/usr/bin/env python

import os, sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

    # fix known PyPy bug (see https://bugs.pypy.org/issue1116)
    import gc
    gc.collect()
    gc.collect()

主要改动是将import execute_manager 修改为 import execute_from_command_line。更详细的修改说明参见上文链接。


2. 使用django.utils.simplejson报错

上述初始化成功后,Mathics仍无法正常启动,报错如下:

Traceback (most recent call last):
  File "/usr/local/bin/mathics", line 9, in <module>
    load_entry_point('Mathics==0.6.0rc1', 'console_scripts', 'mathics')()
  File "/usr/local/lib/python2.7/dist-packages/Mathics-0.6.0rc1-py2.7.egg/mathics/main.py", line 214, in main
    definitions = Definitions(add_builtin=True)
  File "/usr/local/lib/python2.7/dist-packages/Mathics-0.6.0rc1-py2.7.egg/mathics/core/definitions.py", line 49, in __init__
    from mathics.builtin import modules, contribute
  File "/usr/local/lib/python2.7/dist-packages/Mathics-0.6.0rc1-py2.7.egg/mathics/builtin/__init__.py", line 21, in <module>
    from mathics.builtin import (
  File "/usr/local/lib/python2.7/dist-packages/Mathics-0.6.0rc1-py2.7.egg/mathics/builtin/graphics.py", line 9, in <module>
    from django.utils import simplejson
ImportError: cannot import name simplejson

报错信息看下来是在“django.utils”中没有simplejson这一模块所致,经搜索后得知simpljson已在最新版的django中移除了(参见https://docs.djangoproject.com/en/dev/releases/1.7/#features-removed-in-1-7),而这一模块可用标准库中的json代替。解决方法为将py脚本中所有使用simplejson的地方改为json。如将报错信息中提到的graphics.py里的

from django.utils import simplejson

改为:

import json as simplejson


你可能感兴趣的:(ImportError,simplejson,Mathics,manage.py)