当我运行命令时:
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
如何获取django.views.generic
的pydoc文档?
答案 0 :(得分:4)
导入许多Django模块会引入依赖于Django项目环境的其他模块。创建一个虚拟项目,并使用其设置。
$ django-admin.py startproject dummy
$ cd ./dummy
$ DJANGO_SETTINGS_MODULE=dummy.settings pydoc django.views.generic
请注意将env var DJANGO_SETTINGS_MODULE
设置为settings.py文件的导入路径的最后一行。通常,你不需要这个,因为manage.py和wsgi.py为你设置了这个,但是pydoc对此一无所知。
如果您已有项目,显然可以跳过虚拟项目并只使用项目设置。
当使用较新版本的Django时,您还需要在Django通常可用之前调用django.setup()
。在脚本中包装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
答案 1 :(得分: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()