2

私は Django アプリを構築しており、Heroku と Heroku Postgres に移行中です。「python manage.py runserver」または「heroku run python manage.py runserver」を実行すると、ターミナルは「エラー:ファイル名という名前のモジュールがありません」というエラーを返します-ファイル名は、私のメインプロジェクトフォルダー内にあるアプリフォルダーです。 models.py および views.py ファイルなど。以下のファイル構造を参照してください。

INSTALLED APPS にアプリ フォルダーがリストされていて、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/

私はこれに1日以上苦労しているので、それを乗り越える方法についての助けをいただければ幸いです!

編集:コードでファイル名に言及したすべての場所は次のとおりです。

  • admin.py で「from projectname.filename.models import *」として
  • projectname/urls.py で URLconf の下に include('filename.urls',
    'namespace=filename')として
  • filename/urls.py では 'from filename import *' として、URLconf では 'urlpatterns = patterns('filename.views' ...) として
  • views.py で「from filename.models import *」として

venv でも「heroku run python manage.py syncdb」を実行しましたが、「エラー: ファイル名という名前のモジュールがありません」というエラーが返されます。

4

3 に答える 3

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で、スコープがグローバルに利用可能になり、そのまま参照できます。

于 2013-01-02T10:16:02.253 に答える
0

/venv にいますか? 仮想環境に入るのを忘れた後、同様のエラーが発生しました。ターミナルからこれを行うには、次を試してください。

$ source venv/bin/activate

于 2013-01-02T05:31:37.900 に答える
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])
于 2013-01-01T20:08:49.543 に答える