【问题标题】:ModuleNotFoundError: No module named 'models'ModuleNotFoundError:没有名为“模型”的模块
【发布时间】:2023-07-22 21:46:01
【问题描述】:

我有一个非常简单的 django 应用程序,我正在尝试将它部署到 heroku,但它一直在崩溃。在我的本地机器上一切正常,但在 heroku 上却不行

这是我得到的错误(切到相关部分):

File "/app/hello/admin.py", line 4, in <module>
2017-07-10T20:12:27.482194+00:00 app[web.1]:     import models
2017-07-10T20:12:27.482195+00:00 app[web.1]: ModuleNotFoundError: No module 
named 'models'

我使用的是默认的 Django 目录结构:

-python-getting-started

--你好

---初始化.py

---admin.py(这是错误所在)

---models.py(这是我要导入的文件)

---tests.py

---views.py

它在我的本地机器上运行良好。我是不是导入错了?老实说,我什至不知道从哪里开始。我在 Heroku 上托管的任何其他 Django 项目都没有任何问题,只有这个。

这是引发错误的 admin.py 的相关部分:

from django.contrib import admin
from django import forms

import models

# Register your models here.
class BasicInfoCollectionForm(forms.ModelForm):
    class Meta():
        model = models.VolunteerBasicInfo
        fields = ('removed for brevity')

任何帮助将不胜感激

编辑: 我刚刚意识到这个应用程序在 heroku 上使用 python v3.6,而我一直在本地机器上使用 python 2.7 进行开发。

【问题讨论】:

    标签: python django heroku


    【解决方案1】:

    你需要使用相对导入

    from . import models
    

    或者最好导入您将使用的模型,因为它不会在视觉上与django.db.models 发生冲突。

    from django import forms
    
    from .models import VolunteerBasicInfo
    
    class BasicInfoCollectionForm(forms.ModelForm):
        class Meta:
            model = VolunteerBasicInfo
            ...
    

    class Meta 也不需要使用括号。

    【讨论】:

    • 我建议绝对导入,因为 py3 摆脱了相对。
    • 是的,这解决了问题。事实证明,heroku 将他们的 django 应用程序的默认版本更改为 python 3,而我没有注意到这个项目。谢谢!
    • @Adam Python 3 将删除相关导入,请给我一个证明链接吗?
    • 我误读了您可以使用显式相对静止。我总是走我的坏事
    • OP 你能把@vishes_shell 的答案标记为正确吗