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

これはローカルでは問題なく動作しますが、syncdbHeroku で何か ( など)を実行しようとすると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.pthvirtualenvディレクトリ内からその余分なパスを削除すると、Herokuで発生したのと同じエラーが発生し始めました。つまり、私はそれらをより良く修正できるということです!

于 2012-09-12T14:59:03.917 に答える