错误:没有名为[filename]的模块

时间:2013-01-01 19:23:13

标签: python django postgresql heroku module

我正在构建一个Django应用程序,我正在迁移到Heroku和Heroku Postgres。当我运行“python manage.py runserver”甚至“heroku运行python manage.py runserver”终端返回错误“错误:没有名为filename的模块” - 文件名是app文件夹,位于我的主项目文件夹中,包含我的models.py和views.py文件等。请参阅下面的文件结构。

我在我安装的应用程序中列出了app文件夹,当我为projectname运行“ls”时它出现了,所以我很困惑为什么找不到它。

我已经使用startapp启动了一个新的应用程序,并将旧的内容移到了上面,看看它是不是异常。这似乎只是因为试图让Heroku工作而发生。

这是我这个项目的文件结构:

projectname/
      manage.py
      requirements.txt
      Procfile
      projectname/
           templates/
           __init__.py
           settings.py
           urls.py
           wsgi.py
      filename/
           __init__.py
           admin.py
           models.py
           tests.py
           urls.py
           views.py
      static/
      venv/

我一直在努力争取这一天超过一天,所以任何有关如何通过它的帮助将非常感激!

编辑:以下是我在代码中提到文件名的所有地方:

  • 在admin.py中,来自“projectname.filename.models import *”
  • 在URLconf下的projectname / urls.py中包含include('filename.urls',
    'namespace = filename')
  • 在filename / urls.py中为'from filename import *',在URLconf下为'urlpatterns = patterns('filename.views'...)
  • 在views.py中,来自“filename.models import *”

我在venv中运行'heroku run python manage.py syncdb',它仍然返回错误“错误:没有名为filename的模块”。

3 个答案:

答案 0 :(得分:2)

我想这一行

In admin.py as 'from projectname.filename.models import *'

正在提出问题。 projectname部分恕我直言不应该在那里,所以该行应该只读

from filename.models import *

<强> [编辑]

并且projectnamefilename都应该在INSTALLED_APPS中。

并在我的思路上解释更多。您的projectname.filename引用内部projectname文件夹,因此我认为它正在尝试查找不存在的projectname/projectname/filename.py文件。只需将filename添加到INSTALLED_APPS即可使范围全局可用,因此可以称为原样。

答案 1 :(得分:0)

我有一个例程,我用它来转储整个Django模块路径。 re.sub()s只是为了缩短某些路径,让您更容易看到其中的位置。

import sys, re, os

def ModuleList():
    ret = []
    dir_project = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
    project_name = os.path.basename(dir_project)

    for k,v in sys.modules.items():

        x = str(v)
        if 'built-in' in x:
            ret.append((k, 'built-in'))
            continue

        m = re.search(r"^.*?'(?P<module>.*?)' from '(?P<file>.*?)'.*$", x)
        if m:
            d = m.groupdict()
            f = d['file']
            f = re.sub(r'/usr/local/lib/python[.0-9]*/site-packages/django/', 'system django >> ', f)
            f = re.sub(r'/usr/local/lib/python[.0-9]*/site-packages/', 'site-packages >> ', f)
            f = re.sub(r'/usr/local/lib/python[.0-9]*/', 'python >> ', f)
            f = re.sub(dir_project+'.*django/', 'local django >> ', f)
            f = re.sub(dir_project+r'(/\.\./)?', project_name + ' >> ', f)
            ret.append((d['module'], f))
    ret.sort( lambda a,b: cmp(a[0].lower(), b[0].lower()) )
    return ret
# ModuleList

if __name__ == "__main__":
    for x in ModuleList():
        print "%s\t%s" % (x[0], x[1])

答案 2 :(得分:0)

你在/ venv吗?忘记进入虚拟环境后,我遇到了类似的错误。要从终端执行此操作,请尝试:

$ source venv/bin/activate