2012-09-12 110 views
3

我有一个我一直在本地开发的Django 1.4网站(OS X 10.8.1)。它工作正常。但是我现在试图在Heroku上进行设置,并且无法从我的应用中导入模块。为什么Heroku上的我的Django站点需要不同的导入路径?

的结构是这样的:

manage.py 
projectname/ 
    __init__.py 
    appnameone/ 
    appnametwo/ 
    settings/ 
    static/ 
    wsgi.py 
requirements.txt 

在我的设置,我包括使用项目名称我自己的应用程序,如:

INSTALLED_APPS = (
    ... 
    'projectname.appnameone', 
    'projectname.appnametwo', 
    ... 
) 

,当我导入模块,我这样做是没有项目名称,例如:

from appnameone.models.model_name import ModelName 

这个本地工作正常,但当我尝试运行任何东西(如syncdb)在Heroku上,然后我从上面的行中得到一个ImportError。它似乎工作,如果我添加项目名称导入语句,如下所示:

from projectname.appnameone.models.model_name import ModelName 

但是,这不适用于我的本地环境。

我想这是与路径有关,但我不知道发生了什么。有任何想法吗?

+0

你有没有尝试过包括你的应用程序而没有先例''projectname''?像''appnameone'',而不是像''settings.py''中的''projectname.appnameone''? –

+0

好的想法,但是只能在'django/template/loaders/app_directories.py'中得到'ImportError appnameone:No module named appnameone'。 –

+0

哦,对,你有你的应用程序_内容_。很高兴你知道这个问题:D –

回答

1

当我认为这并没有在我的本地环境中工作:

from projectname.appnameone.models.model_name import ModelName 

我想我必须正好碰上一些其他的问题。由于已经完成并更新了所有导入我的应用程序的项目名称前缀,它现在可以在我的本地环境和Heroku上运行。

This answer有把你的应用程序在同一级别的项目(在这种情况下,进口不需要的项目名称前缀),并把你的项目中您的应用程序(之间的差别的一个很好的解释在这种情况下,需要项目名称前缀)。

这听起来像我的当地环境,如问题描述,不应该一直在努力,因为我的应用程序是在项目内,但我并没有导入它们的方式。我在猜测我的Python Path非常松散,当它不应该的时候让我逃避。

更新:我认识的最终原因。在与的virtualenv建立和virtualenvwrapper我做了这样的事情:

$ add2virtualenv ~/Projects/clientname/django-projectname/projectname 

此补充说,我的PYTHONPATH,这让我非常的环境宽容。在Heroku上,情况并非如此(至少,不是默认情况下,也许可以调整它)。一旦我从我的virtualenv目录中的lib/python2.7/site-packages/virtualenv_path_extensions.pth中删除了额外的路径,我就开始获得与Heroku相同的错误。这意味着我可以更好地解决它们!

相关问题