ImportError: no module named guardian

4.1k views Asked by At

I'm new to Django, so generally I am the cause of most of my problems, but I can't figure out why the django-guardian 1.3 app won't install. I'm using Django 1.7 in a virtual environment, my OS is Windows 8.1.

I followed the installation directions at pythonhosted.org/django-guardian/installation.html and configuration at pythonhosted.org/django-guardian/configuration.html, but I get an error when I attempt to run the program.

I added 'guardian', ANONYMOUS_USER_ID, and the backends to my settings.py

"""
Django settings for VolunteerManager project.
For more information on this file, see
https://docs.djangoproject.com/en/1.7/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.7/ref/settings/
"""

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'Super Super Secret'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

TEMPLATE_DEBUG = True

ALLOWED_HOSTS = []
ANONYMOUS_USER_ID = -1

# Application definition

INSTALLED_APPS = (
#DEFAULT APPS
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

#THIRD PARTY APPS
    'guardian',
    'registration',
        #Copyright (c) 2007-2012, James Bennett
        #All rights reserved.
    'django.contrib.sites',

#LOCAL APPS
    'Volunteer',
)

ACCOUNT_ACTIVATION_DAYS = 7 # One-week activation window;
REGISTRATION_AUTO_LOGIN = True # Automatically log the user in.

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend', 
    'guardian.backends.ObjectPermissionBackend',
)

ROOT_URLCONF = 'VolunteerManager.urls'


#ANONYMOUS_USER_ID = 'VOLUNTEER_USER_ID'

WSGI_APPLICATION = 'VolunteerManager.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.7/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'volunteer',
        'USER': 'root',
        'PASSWORD': '$',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}

# Internationalization
# https://docs.djangoproject.com/en/1.7/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.7/howto/static-files/

STATIC_URL = '/static/'

TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]

LOGIN_REDIRECT_URL = '/home/'

SITE_ID = 1

Error picture available on IMGUR

Django-guardian appears to be installed in my virtual environment, but it's still not finding it. Any ideas what I might have done wrong? (Or other suggestions for per-object permissions in Django?) Thank You!

UPDATE: I narrowed the problem down to the virtualenv. When I installed the modules without using virtualenv, then django finds them like it should. I'm still not sure what exactly I did wrong, but this works for now, considering that I'm only working on one project at the moment.

2

There are 2 answers

0
Vadden On

For those who encounter the same problem:

The reason might be you don't own the virtualenv folder and all its contents inside, thus

sudo chown -R /path/to/venv

should work.

1
Burhan Khalid On

I narrowed the problem down to the virtualenv. When I installed the modules without using virtualenv, then django finds them like it should.

You need to activate the virtual environment each time your run django, otherwise you'll continue to run into issues like what you have described.

Activating the virtual environment (by executing Scripts\activate.bat) sets the correct environment variables to that all Python commands are run against the virtual environment's Python installation.

If you do not run the activate.bat file before running Python commands, they will be executed against the system-wide Python installation.

The reason django it works is because you are running django without the virtualenv activated; and you also happen to have django installed in the global Python environment.