2014-03-04 31 views
12

我想使用Sphinx,因此它可以爲我的Python代碼自動生成一個pydoc,但是出現錯誤。我做錯了什麼?相對導入需要'包'參數

conf.py獅身人面像的配置文件

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 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 

類型錯誤錯誤,當我試圖讓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. 
+1

@lanzz你可以做這樣一個答案。這非常精確。 – User

回答

7

DJANGO_SETTINGS_MODULE有望成爲一個Python module identifier,而不是一個文件系統路徑。查看django/conf/__init__py文件,似乎到您的設置模塊的相對路徑不會在那裏工作。您需要將其移動到您的sys.path中列出的目錄下,或者您應該將父目錄添加到您的sys.path,並從那裏引用您的設置模塊。

0
  1. 可能是你在uwsgi.py設定的設置不正確
  2. 在uwsgi.py設置路徑(XXXX是在同一目錄作爲uwsgi.py):

    os.environ .setdefault(「DJANGO_SETTINGS_MODULE」,「XXXX.settings」)

3

我來通過谷歌這個問題,所以我會回答什麼幫助我(不直接相關的問題)。我使用importlib來動態導入由字符串給出的子包。

import importlib 
module_name = 'subpackage.i.import' 
special_module = importlib.import_module(module_name, package=None) 

這只是必須調整到

import importlib 
module_name = 'subpackage.i.import' 
special_module = importlib.import_module(module_name, package='my_current_pkg)