2013-01-01 101 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

相關問題