为什么在尝试调用 Django Python shell 时出现错误?

Why am I getting errors when trying to invoke Django Python shell?

我当前的 python 版本是 2.7.10,Django 的版本是 1.9.1,path.py 是 8.1.2 但每次我尝试调用 python shell 通过命令: $ python manage.py shell 我遇到了很多错误,它们的结尾看起来像:

Error in sys.excepthook:
Traceback (most recent call last):
  File "W:\SVN\vendors\python\win32\lib\site-packages\IPython\CrashHandler.py", line 157, in __call__
    report.write(self.make_report(traceback))
  File "W:\SVN\vendors\python\win32\lib\site-packages\IPython\CrashHandler.py", line 215, in make_report
    rpt_add('BZR revision   : %s \n\n' % Release.revision)
AttributeError: 'module' object has no attribute 'revision'

Original exception was:
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "W:\SVN\vendors\python\win32\lib\site-packages\django\core\management\__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "W:\SVN\vendors\python\win32\lib\site-packages\django\core\management\__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "W:\SVN\vendors\python\win32\lib\site-packages\django\core\management\base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "W:\SVN\vendors\python\win32\lib\site-packages\django\core\management\base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "W:\SVN\vendors\python\win32\lib\site-packages\django\core\management\commands\shell.py", line 69, in handle
    self.run_shell(shell=options['interface'])
  File "W:\SVN\vendors\python\win32\lib\site-packages\django\core\management\commands\shell.py", line 58, in run_shell
    return getattr(self, shell)()
  File "W:\SVN\vendors\python\win32\lib\site-packages\django\core\management\commands\shell.py", line 41, in ipython
    ip()
  File "W:\SVN\vendors\python\win32\lib\site-packages\django\core\management\commands\shell.py", line 22, in _ipython_pre_011
    shell = IPShell(argv=[])
  File "W:\SVN\vendors\python\win32\lib\site-packages\IPython\Shell.py", line 73, in __init__
    debug=debug,shell_class=shell_class)
  File "W:\SVN\vendors\python\win32\lib\site-packages\IPython\ipmaker.py", line 521, in make_IPython
    IP.pre_config_initialization()
  File "W:\SVN\vendors\python\win32\lib\site-packages\IPython\iplib.py", line 835, in pre_config_initialization
    self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
  File "W:\SVN\vendors\python\win32\lib\site-packages\IPython\Extensions\pickleshare.py", line 53, in __init__
    if not self.root.isdir():
TypeError: _isdir() takes exactly 1 argument (0 given)

我该如何克服这个问题?

通过快速搜索,似乎在同时安装 Django 和 IPython 时会发生此错误,因为显然 Django 将尝试使用 IPython shell.

有类似问题的人的第一个资源:

run python manage.py shell occurs errors

在上面的 link 中,对 OP 问题的评论之一建议查看此单独的线程以获取答案:

https://superuser.com/questions/318655/error-running-ipython3-on-xp-typeerror-isdir-takes-exactly-1-argument-0-gi



获奖答案如下:

Finally decided to give this another stab, and managed to get it to work. The solution is a two-line change in the ipython-0.11-py3.2.egg\IPython\utils\pickleshare.py file, line 52:

Before:

if not self.root.isdir():
    self.root.makedirs()

After:

if not os.path.isdir(self.root):
        os.makedirs(self.root)