Je souhaite utiliser Sphinx afin qu'il puisse générer automatiquement un pydoc pour mon code python, mais je reçois une erreur. Qu'est-ce que je fais mal?
conf.py fichier de configuration sphinx
import sys
import os
from Django.conf import settings
os.environ['Django_SETTINGS_MODULE'] = '../cloud_server.settings'
sys.path.insert(0, os.path.abspath('../cloud_server/cloud_api'))
views.py fichier Django
from Django.contrib.auth.models import User, Group
from rest_framework import viewsets
from cloud_api.serializers import UserSerializer, GroupSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all()
serializer_class = UserSerializer
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
Typeerror erreur renvoyée lorsque j'essaie de créer le fichier html.
C:\Users\ogward\STUDPROJ\docs\code.rst:3: WARNING: autodoc: failed to import module u'views'; the following exception wa
s raised:
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\sphinx-1.2.2-py2.7.Egg\sphinx\ext\autodoc.py", line 335, in import_object
__import__(self.modname)
File "C:\Users\ogward\STUDPROJ\cloud_server\cloud_api\views.py", line 1, in <module>
from Django.contrib.auth.models import User, Group
File "C:\Python27\lib\site-packages\Django\contrib\auth\__init__.py", line 6, in <module>
from Django.middleware.csrf import rotate_token
File "C:\Python27\lib\site-packages\Django\middleware\csrf.py", line 14, in <module>
from Django.utils.cache import patch_vary_headers
File "C:\Python27\lib\site-packages\Django\utils\cache.py", line 26, in <module>
from Django.core.cache import get_cache
File "C:\Python27\lib\site-packages\Django\core\cache\__init__.py", line 69, in <module>
if DEFAULT_CACHE_ALIAS not in settings.CACHES:
File "C:\Python27\lib\site-packages\Django\conf\__init__.py", line 54, in __getattr__
self._setup(name)
File "C:\Python27\lib\site-packages\Django\conf\__init__.py", line 49, in _setup
self._wrapped = Settings(settings_module)
File "C:\Python27\lib\site-packages\Django\conf\__init__.py", line 128, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "C:\Python27\lib\site-packages\Django\utils\importlib.py", line 33, in import_module
raise TypeError("relative imports require the 'package' argument")
TypeError: relative imports require the 'package' argument
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
writing output... [ 50%] code
writing output... [100%] index
writing additional files... genindex search
copying static files... done
copying extra files... done
dumping search index... done
dumping object inventory... done
build succeeded, 1 warning.
Django_SETTINGS_MODULE
devrait être un identifiant de module Python , et non un chemin de système de fichiers. En regardant le fichier Django/conf/__init__py
, il semble qu'un chemin relatif à votre module de paramètres ne fonctionne pas là. Vous devrez le déplacer sous un répertoire répertorié dans votre sys.path
, ou vous devrez ajouter un répertoire parent à votre sys.path
et référencer votre module de paramètres à partir de cet emplacement.
Je suis venu à cette question via Google, donc je vais répondre à ce qui m'a aidé (pas directement liée à la question).
J'utilise importlib
pour importer dynamiquement des sous-packages donnés par une chaîne.
import importlib
module_name = 'subpackage.i.import'
special_module = importlib.import_module(module_name, package=None)
Cela doit simplement être ajusté pour
import importlib
module_name = 'subpackage.i.import'
special_module = importlib.import_module(module_name, package='my_current_pkg)
le chemin des paramètres dans uwsgi.py (XXXX est dans le même répertoire que uwsgi.py):
os.environ.setdefault ("Django_SETTINGS_MODULE", "XXXX.settings")