2013-01-01 70 views
1

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

我有安装应用程序中列出的应用程序文件夹,它显示当我运行项目名称的“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导入*”
  • 在项目名称/ urls.py URL配置下为包括(“filename.urls”,
    “命名空间=文件名”)
  • 在文件名/ urls.py为“从文件名进口*”和URL配置下为“URL模式=模式(” filename.views'。 ..)
  • 在views.py as'from filename.models import *'

我在Venv中运行'heroku run python manage.py syncdb',它仍然返回错误“Error:No module named filename”。

+0

你的代码在哪里做'import filename'?是否在'projectname'下的某处? – favoretti

+0

@favoretti我在上面的问题中添加了一个编辑,其中我在我的代码中导入了文件名。我不确定我是否已经在projectname下导入了文件名。我如何检查我是否已经这样做?我希望上面的编辑有帮助。 – Jess

回答

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将使范围全局可用,因此可以原样提及。

+0

谢谢!我认为这已经解决了!当我运行'heroku run python manage.py syncdb'时,我现在看到了一个不同的错误。错误是: ! Heroku客户端内部错误。 !搜索帮助:https://help.heroku.com !或者报告错误:https://github.com/heroku/heroku/issues/new 错误:操作超时 - 连接(2)(Errno :: ETIMEDOUT)“ 所以我猜这意味着 – Jess

+0

这可能与heroku本身有关,不知道:) – favoretti

+0

可悲的是,'No module name filename'这个错误再次显示了它自己当我运行heroku运行python manage.py syncdb。如果有帮助,我也会收到错误 “错误地配置在/ settings.DATABASES配置不正确。请提供ENGINE值。 “尽管我已经在settings.py中将ENGINE值作为'django.db.backends.postgresql_psycopg2'提供给任何想法? – Jess

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]) 
0

你在/ venv?忘记进入虚拟环境后,我遇到了类似的错误。从终端这样做,试试:

$ source venv/bin/activate

+0

当我在venv时遇到同样的错误。我刚刚运行$ source venv/bin/activate,然后heroku运行python manage.py syncdb,终端返回“Error:No module named filename”。有任何想法吗? – Jess

+0

看起来像favoretti想通了。项目祝你好运! –

+0

谢谢!现在与Heroku错误摔跤,但更近一步:) – Jess

相关问题