2016-09-28 4 views
3

ich ein neues Python-Projekt habe, mit einer models.py-Datei, die wie folgt aussieht:Import: Kein Modul ‚Modelle‘ in Python namens 3

from django.db import models 
from django.contrib.auth.models import User 
from django.core.validators import MinValueValidator, MaxValueValidator 

class Metric(models.Model): 
    users = models.ManyToManyField(User, through = 'Vote') 
    name = models.CharField(max_length = 255) 

class Vote(models.Model): 
    metric = models.ForeignKey(Metric, on_delete = models.CASCADE) 
    user = models.ForeignKey(User, on_delete = models.CASCADE) 
    rating = models.IntegerField(validators = [MinValueValidator(0), MaxValueValidator(10)]) 
    email = models.EmailField 

    def __str__(self): 
    return str(self.rating) 

und eine admin.py-Datei wie folgt:

from django.contrib import admin 
from models import Metric, Vote 

admin.site.register(Metric) 
admin.site.register(Vote) 

Wenn Sie dies mit Python 2.7.5 ausführen, funktioniert der Start der App gut. Wenn ich versuche laufen mit ihm Python 3.5.1, erhalte ich die Fehler ImportError: No module named 'models', mit diesem Backtrace:

Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x103bd2b70> 
Traceback (most recent call last): 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/utils/autoreload.py", line 226, in wrapper 
    fn(*args, **kwargs) 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 113, in inner_run 
    autoreload.raise_last_exception() 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/utils/autoreload.py", line 249, in raise_last_exception 
    six.reraise(*_exception) 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/utils/six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/utils/autoreload.py", line 226, in wrapper 
    fn(*args, **kwargs) 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/__init__.py", line 27, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/apps/registry.py", line 115, in populate 
    app_config.ready() 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/contrib/admin/apps.py", line 23, in ready 
    self.module.autodiscover() 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/contrib/admin/__init__.py", line 26, in autodiscover 
    autodiscover_modules('admin', register_to=site) 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/utils/module_loading.py", line 50, in autodiscover_modules 
    import_module('%s.%s' % (app_config.name, module_to_search)) 
    File "/Users/sashacooper/pyenv/lib/python3.5/importlib/__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 986, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 662, in exec_module 
    File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed 
    File "/Users/sashacooper/Desktop/pogroms/crockerometer2/crockerometer/admin.py", line 2, in <module> 
    from models import Metric, Vote 

Ich versuchte from __future__ import absolute_import zu Beginn der admin.py Datei habe das Hinzufügen pro ähnlich betitelten Stack-Überlauf-Beiträge aber es hat den Fehler nicht geändert. Was verursacht es?

+0

haben Sie versucht, den vollständigen Pfad ausgehend von Ihrer Datei manage.py zu übergeben? – sebb

Antwort

7

In Python 3 müssen Sie es sagen, wenn Sie relative Importe verwenden:

from .models import ... 
2

versuchen from .models import Metric, Vote in Ihrem admin.py

0

ich immer benutzt haben:

from myapp.models import ... 

Anstatt einer relativen einführen. Nur meine persönliche Vorliebe. Vielleicht macht der relative Import mehr Sinn, wenn es die admin.py für myapp ist, aber ich mag immer noch die ausdrückliche Bedeutung des App-Namens im Import.