3

我有一个本地开发的 Django 1.4 站点(OS X 10.8.1)。它工作正常。但我现在正试图在 Heroku 上进行设置,但它无法从我的应用程序中导入模块。

结构是这样的:

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

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

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

4

1 回答 1

1

当我认为这在我的本地环境中不起作用时:

from projectname.appnameone.models.model_name import ModelName

我想我一定是遇到了其他问题。因为已经通过并更新了我的应用程序的所有导入以使用项目名称作为前缀,所以它现在可以在我的本地环境和 Heroku 上运行。

这个答案很好地解释了将您的应用程序与您的项目处于同一级别(在这种情况下导入不需要项目名称前缀)和将您的应用程序放在您的项目中(在这种情况下项目名称前缀是需要)。

如问题中所述,听起来我的本地环境不应该正常工作,因为我的应用程序在项目中,但我没有将它们导入。我猜我的 Python 路径在这里非常松散,并且在不应该的时候让我侥幸逃脱。

更新:我意识到了最终的原因。在使用 virtualenv 和 virtualenvwrapper 进行设置期间,我做了这样的事情:

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

这将它添加到我的 PYTHONPATH 中,这使我的环境非常宽容。在 Heroku 上,情况并非如此(至少默认情况下不是这样;也许可以对其进行调整)。一旦我从lib/python2.7/site-packages/virtualenv_path_extensions.pth我的 virtualenv 目录中删除了那个额外的路径,我就会开始遇到与 Heroku 相同的错误。这意味着我可以更好地修复它们!

于 2012-09-12T14:59:03.917 回答