urls.py在Heroku中引发ImportError但不在本地引发

时间:2016-05-02 19:11:05

标签: python django heroku

我对django和Heroku环境相对较新,我怀疑我有以下问题,因为我在项目中忽略了一些小问题。基本上我能够manage.py runserver在本地没有任何问题,并且本地http视图按预期显示。我能够毫无错误地将更改推送到Heroku。

然而,当我尝试通过http访问我的远程Heroku项目时,我从应用程序ImportError获得urls.py。我相信pycup应用已在项目settings.py中正确定义,因为它可以在本地运行。尽管如此,我还是尝试将'apps.pycup''apps'导入设置但未成功。

我最初的想法是Heroku没有正确地读取文件结构,或者git没有将__init__.py文件夹中的apps文件推送到Heroku但是在做完之后快速检查heroku run bashls apps/,但事实并非如此。

我使用apps/文件夹包含pycup应用程序的原因是它是在操作方法博客上提出的,它似乎是对潜在的未来可扩展性的一个很好的建议整齐地开发项目中的更多应用程序。

以下是我使用的基本文件结构:

manage.py
Procfile
requirements.txt
reunion
|___ static
|___ settings.py
|___ urls.py
|___ wsgi.py
|___ __init__.py
|___ __pycache__.py
apps
|___ pycup
| |___ admin.py
| |___ apps.py
| |___ migrations
| |___ models.py
| |___ static
| |___ templates
| |___ tests.py
| |___ urls.py
| |___ views.py
| |___ __init__.py
| |___ __pycache__.py
|___ __init__.py
|___ __pycache__.py

以下是项目中urls.py个文件的代码示例:

来自主项目文件夹reunion/urls.py

from django.conf.urls import include, url
from django.contrib import admin

from apps.pycup import urls as pycupurls

urlpatterns = [
    # Examples:
    # url(r'^$', 'reunion.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include(pycupurls)),
]
来自应用文件夹apps/pycup/urls.py

from django.conf.urls import include, url
from django.contrib import admin

from apps.pycup import views # <- This is the line to which the error is traced in Heroku

urlpatterns = [
    # Examples:
    # url(r'^blog/', include('blog.urls')),
    # url(r'^admin/', include(admin.site.urls)),

    url(r'^$', views.index, name='index'),
]

这是我得到的错误:

ImportError at /
No module named pycup
Request Method: GET
Request URL:    http://********.herokuapp.com/
Django Version: 1.9.2
Exception Type: ImportError
Exception Value: No module named pycup
Exception Location: /app/apps/pycup/urls.py in <module>, line 4
Python Executable:  /app/.heroku/python/bin/python
Python Version: 2.7.11

1 个答案:

答案 0 :(得分:1)

如果您与要导入的项目位于同一个父文件夹中,则不会将根路径放在要调用的项目上。所以你从“apps.pycup导入视图”获得它只需要“来自.import视图”。您的代码实际上使用您的语句执行的操作是尝试访问父pycup文件夹下的“apps.py”文件,并且在该文件夹中找不到名为pycup的函数