Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Relative imports require the 'package' argument

Tags:

I want to use Sphinx so it can automatically generate a pydoc for my python code but I'm getting an error. What an I doing wrong?

conf.py sphinx config file

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 file

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 error thrown when I'm trying to make the html file.

    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. 
like image 348
ogward Avatar asked Mar 04 '14 13:03

ogward


People also ask

How do you use relative import in Python?

Relative imports use dot(.) notation to specify a location. A single dot specifies that the module is in the current directory, two dots indicate that the module is in its parent directory of the current location and three dots indicate that it is in the grandparent directory and so on.

How does relative import work?

Relative imports make use of dot notation to specify location. A single dot means that the module or package referenced is in the same directory as the current location. Two dots mean that it is in the parent directory of the current location—that is, the directory above.


1 Answers

I came to this question via Google, so I'll answer what helped me (not directly related to the question).

I use importlib to dynamically import sub-packages given by a string.

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

This simply has to be adjusted to

import importlib module_name = 'subpackage.i.import' special_module = importlib.import_module(module_name, package='my_current_pkg') 
like image 96
Martin Thoma Avatar answered Sep 20 '22 17:09

Martin Thoma