Car*_*rel 16 python django documentation python-sphinx
在尝试为可重用的Django应用程序生成sphinx文档时,我发现了以下snafoo.当sphinx解析model.py代码时,它会被试图访问Django 项目设置的代码所阻挠.由于这是一个独立/可重用的应用程序,因此没有提供这些设置的主项目,即没有ROOT/PROJECT/PROJECT/settings.py文件.
为了清楚起见,这就是我所做的.遍历通常的项目文件夹cd ROOT/PROJECT并创建一个生成以下结构的应用程序 django-admin startapp APPLICATION
/ROOT/
/PROJECT/
/APPLICATION/
admin.py
apps.py
models.py
tests.py
views.py
Run Code Online (Sandbox Code Playgroud)
注意:没有/ROOT/PROJECT/PROJECT/*.py文件,因为我没有导航到根文件夹cd root并使用通常可能的方式创建项目django-admin createproject.
接下来创建sphinx文档,spinx-quickstart docs生成以下附加结构.
/ROOT/
/PROJECT/
/docs/
/source/
...
conf.py
make.bat
Run Code Online (Sandbox Code Playgroud)
那就是文档旁边的文档APPLICATION.
如果没有文件,我可以放置什么conf.py来正确加载应用程序settings.py?
在尝试解决这个问题时,我已经仔细阅读了许多SO问题,博客和Django文档,但没有找到简洁的解决方案.因为这已经被问了几次之前我想要激励它不会被重复关闭,如果建议的副本中的答案使用其中一个片段作为解决方案.
失败了 AppRegistryNotReady
from django.conf import settings
settings.configure()
Run Code Online (Sandbox Code Playgroud)类似于第一种失败方法即发射 AppRegistryNotReady
from django.conf import settings
settings.configure()
settings.INSTALLED_APPS += ['fintech']
Run Code Online (Sandbox Code Playgroud)失败了 ImproperlyConfigured
import django
django.setup()
Run Code Online (Sandbox Code Playgroud)有一个非常古老的解决方案提到了弃用 setup_environ
from django.core.management import setup_environ
from django.conf import settings
settings.configure()
setup_environ(settings)
Run Code Online (Sandbox Code Playgroud)这也是一个最喜欢的答案,但如果没有settings.py文件则会失败.
import django
os.environ['DJANGO_SETTINGS_MODULE'] = 'PROJECT.settings'
django.setup()
Run Code Online (Sandbox Code Playgroud)我也提出这个问题相当冗长,因为关于SO的相关问题相当简洁,并不是特别有用.如果有任何帮助我正在使用Django 1.10.
因为我已经发现,如果他们的进口setup从功能setuptools与distutils.core一个可以调用安装脚本编译他们的文档作为python setup.py build_sphinx -b BUILDER它可能是最好的调用当再次问这个setup.py了docs/conf.py通过任一make.bat或MakeFile通过狮身人面像提供.
我怀疑结果会是相似的,即包括所提供的答案,docs/conf.py或者在内部setup.py,但两者都必须在同一个Python会话中调用.
如果您不想让您的文档依赖于"演示"项目,那么您可以手动构建您的文档中的设置conf.py.在路径设置部分:
import django
from django.conf import settings
import os
import sys
# add path to sys.path (this might be different in your project)
sys.path.insert(0, os.path.abspath('..'))
# pass settings into configure
settings.configure(
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'my_reusable_app',
'any_other_dependencies',
]
)
# call django.setup to load installed apps and other stuff
django.setup()
# ... continue with rest of conf.py
Run Code Online (Sandbox Code Playgroud)
现在,Sphinx可以在没有项目的情况下导入应用程序模块settings.py.其他设置可以传递给settings.configure().
| 归档时间: |
|
| 查看次数: |
773 次 |
| 最近记录: |