在试图为一个可重用的Django应用程序生成sphinx文档时,我偶然发现了以下snafoo。当sphinx解析model.py
代码时,它被其中试图访问Django项目设置的代码所阻碍。由于这是一个独立的/可重用的应用程序,因此没有一个主项目提供这些设置,即没有ROOT/PROJECT/PROJECT/settings.py
文件。在
为了清楚起见,我做了些什么。遍历到通常的项目文件夹cd ROOT/PROJECT
,并创建一个应用程序django-admin startapp APPLICATION
,它产生以下结构
注意:没有/ROOT/PROJECT/PROJECT/*.py
文件,因为我没有像通常那样导航到根文件夹cd root
并使用django-admin createproject
创建一个项目。在
下一步创建sphinx文档spinx-quickstart docs
,生成以下附加结构。在
即文档被构建在APPLICATION
旁边。在
我在conf.py
中放置什么来正确加载应用程序而不存在settings.py
文件?在
在试图解决这个问题的过程中,我仔细阅读了许多SO问题、博客和Django文档,但没有找到一个简洁的解决方案。因为这个问题在之前已经被问过几次了,所以我想鼓励大家不要把它作为一个副本来关闭,如果在建议的副本中的答案使用这些片段中的一个作为它的解决方案。在
失败,返回AppRegistryNotReady
from django.conf import settings
settings.configure()
类似于第一种失败方法,即发射AppRegistryNotReady
from django.conf import settings
settings.configure()
settings.INSTALLED_APPS += ['fintech']
失败,返回ImproperlyConfigured
import django
django.setup()
有一个非常古老的解决方案提到了弃用的setup_environ
from django.core.management import setup_environ
from django.conf import settings
settings.configure()
setup_environ(settings)
这也是最受欢迎的答案,但如果没有settings.py
文件,则失败。在
import django
os.environ['DJANGO_SETTINGS_MODULE'] = 'PROJECT.settings'
django.setup()
我也把这个问题弄得相当冗长,因为上面的相关问题非常简洁,没有特别的帮助。如果有什么帮助的话,我用的是django1.10。在
我后来发现,如果一个人从setuptools
和distutils.core
导入他们的setup
函数,那么你可以调用安装脚本来编译他们的文档,就像在python setup.py build_sphinx -b BUILDER
中一样。在通过make.bat
或Sphinx提供的docs/conf.py
调用{
不过,我怀疑结果会类似,即在docs/conf.py
内或在setup.py
内包含提供的答案,毕竟这两个答案都必须在同一个Python会话中调用。在
如果您不想让文档依赖于“演示”项目,那么您可以在
conf.py
中手动构建设置。在路径设置部分:现在Sphinx可以导入应用程序模块,而不需要项目
settings.py
。其他设置可以传递给settings.configure()
。在我对django1.11和sphinx1.5.5也有同样的问题。我没能让它正常工作,你上面提到的所有解决方案也不起作用。最后我把这个加到我的狮身人面像上解决了这个问题配置文件公司名称:
这不是问题的答案
但是另一种方法:在可重用包中放入一个最小的、可行的Django项目。它可以用于实现示例、测试(包括代码覆盖率)、开发和文档生成。我们在公司的私有存储库中这样做,我在github上看到了一些django包也这样做。在
我的软件包的典型结构如下所示:
在
^{pr2}$docs/conf.py
中,我检查设置环境变量,如果没有,则使用演示项目:这样,您就可以在调用
sphinx
之前设置DJANGO_SETTINGS_MODULE
环境变量,从而使用另一个项目来构建文档。在settings.py
只包含运行应用程序所需的最小配置。这些是绝对至最小功:相关问题 更多 >
编程相关推荐