【问题标题】:How do I fix this Django Import Error?如何修复此 Django 导入错误?
【发布时间】:2015-07-13 14:02:46
【问题描述】:

这感觉像是没有人能够回答的问题之一,但无论如何我都会问它。我有一个 Django 1.6 项目,当我尝试通过 Django 开发服务器访问我的站点主页时,该项目引发了导入错误:

ImportError at /
No module named photo

错误发生在我的一个视图顶部的这一行:

# apps/photos/views.py
from classes.photo import Photo

这是堆栈跟踪:

Request Method: GET
Request URL: http://localhost:8000/

Django Version: 1.6.2
Python Version: 2.7.5
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'apps.admin',
 'apps.account',
 'apps.home',
 'apps.members',
 'apps.messages',
 'apps.payment',
 'apps.photos',
 'apps.signin',
 'apps.profile',
 'scripts',
 'apps.try',
 'favicon',
 'django_nose',
 'django_extensions')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.middleware.common.BrokenLinkEmailsMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  101.                 resolver_match = resolver.resolve(request.path_info)
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve
  318.             for pattern in self.url_patterns:
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/core/urlresolvers.py" in url_patterns
  346.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/core/urlresolvers.py" in urlconf_module
  341.             self._urlconf_module = import_module(self.urlconf_name)
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/utils/importlib.py" in import_module
  40.         __import__(name)
File "/www/yearbook/conf/urls.py" in <module>
  16.     url(r'^photos/',             include('apps.photos.urls')),
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/conf/urls/__init__.py" in include
  26.         urlconf_module = import_module(urlconf_module)
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/utils/importlib.py" in import_module
  40.         __import__(name)
File "/www/yearbook/apps/photos/urls.py" in <module>
  5. from apps.photos.views import ack_photos_uploaded
File "/www/yearbook/apps/photos/views.py" in <module>
  11. from classes.photo import Photo

Exception Type: ImportError at /
Exception Value: No module named photo

通常这类问题很容易解决,但这个问题让我很困惑。我的“年鉴”项目中有许多应用程序,包括有问题的照片应用程序:

yearbook (Django project)
├── admin
├── apps (My various apps... see below)
├── bin
├── classes  (photo.py in here)
├── conf (my settings.py and config files)
├── manage.py
├── scripts
├── static
└── templates

apps
├── __init__.py
├── __init__.pyc
├── account
├── home
├── members
├── messages
├── photos  (<- problem occurs here)
├── profile
└── signin

classes/photo.py 是一个 Python 模块,它包含一个 Photo 类以及处理照片所需的各种实例、静态和类方法。我使用类而不是模型,因为我不需要在我的数据库中存储与照片相关的信息。

# classes/photo.py
class Photo:
    # instance variables and various methods here
    pass

此错误的奇怪之处在于,我可以将“from classes.photo import Photo”添加到我的任何其他应用程序的视图中,但我没有收到此错误。事实上,我的“管理员”和“个人资料”应用程序导入并广泛使用了照片模块的照片类。只有当我将它添加到我的照片 view.py 文件时才会发生这种情况。感觉像是某种名称冲突,但我不明白这是怎么回事,因为我的课程模块的路径是 /www/yearbook/classes/photo.py 但尝试导入它的视图在 /www/yearbook /apps/照片/views.py。 classes 和 apps/photos 目录中都有空的 __init__.py 文件。

有谁知道可能是什么问题?这尤其令人沮丧,因为这意味着我的照片管理应用程序无法使用我为支持管理照片而构建的照片类来处理照片。

谢谢!

【问题讨论】:

  • 可能是循环依赖问题。 classes.photo 会导入 photos.views 吗?
  • 这是个好主意,但是,不,classes.photo 不会导入 apps.photos.views。
  • 从 yearbook.classes.photo 导入照片?
  • @AjayGupta 是的,我也试过了,但没有解决。
  • 我认为这是一个循环导入问题

标签: django django-models django-views


【解决方案1】:

我发现了问题所在。我的 yearbook/apps/photos 目录中也碰巧有一个 classes.py 文件。当我尝试从 apps/photos/views.py 中的 classes.photo 模块导入 Photo 时,Django 似乎将它与我的 years/classes 目录混淆了。

【讨论】:

    【解决方案2】:

    尝试将__init__.py 添加到您的文件夹classes。这样,python 就知道它是您项目的一部分。

    【讨论】:

    • 你一定没有从头到尾阅读我的问题,因为我说过我已经这样做了。
    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 2023-03-12
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多