5

当我运行命令时:

pydoc django.views.generic

我得到错误:

problem in django.views.generic - 
<class 'django.core.exceptions.ImproperlyConfigured'>:
Requested setting DEFAULT_INDEX_TABLESPACE, 
but settings are not configured. You must either define 
the environment variable DJANGO_SETTINGS_MODULE or call 
settings.configure() before accessing settings

如何获取 pydoc 文档django.views.generic

4

2 回答 2

7

导入许多 Django 模块会引入依赖于 Django 项目环境中的其他模块。创建一个虚拟项目,并使用其设置。

$ django-admin.py startproject dummy
$ cd ./dummy
$ DJANGO_SETTINGS_MODULE=dummy.settings pydoc django.views.generic

请注意将 env varDJANGO_SETTINGS_MODULE设置为 settings.py 文件的导入路径的最后一行。通常,您不需要它,因为 manage.py 和 wsgi.py 为您设置了它,但 pydoc 对此一无所知。

如果您已经有一个项目,您显然可以跳过虚拟项目并使用您的项目设置。


在使用较新版本的 Django 时,还需要django.setup()在 Django 普遍可用之前调用。将 pydoc 包装在脚本中来执行此操作,而不是直接调用 pydoc。

my_pydoc.py

import django
import pydoc
import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'dummy.settings'
django.setup()
pydoc.cli()
python my_pydoc.py django.views.generic
于 2014-07-16T05:38:19.967 回答
1

虽然davidism的答案适用于某些事情,但它不适用于我自己的应用程序,因为我有一个AppRegistryNotReady例外。我发现我需要在我的应用程序文件中做一些临时性的工作才能让它工作:

import sys
importer = sys.modules['__main__'].__spec__
if importer.name == 'pydoc':
    import django
    django.setup()

资源

最后它起作用了,至少对于views.py. 其他文件可能需要其他解决方案。这感觉很脆弱并且依赖于版本,但它适用于 Django 1.10.2 和 Python 3.5.2。


sys.argv[0]具有相同的信息,/usr/lib/python3.5/pydoc.py因此可以通过以下方式更简单可靠地完成它:

import sys, os
if os.path.splitext(os.path.basename(sys.argv[0]))[0] == 'pydoc':
    import django
    django.setup()
于 2016-10-19T20:22:03.197 回答