Mercurial を使用して、Python 2.7 をセットアップした Windows マシンに Django プロジェクトを複製しました。(コマンドの有無にかかわらず)実行しようとするとmanage.py
、次のエラーが発生します。
Traceback (most recent call last):
File "C:\Users\jes.000\Documents\project\manage.py", line 30, in <module>
import django.core.servers.basehttp
File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 26, in <module>
from django.views import static
File "C:\Python27\lib\site-packages\django\views\static.py", line 95, in <module>
template_translatable = ugettext_noop(u"Index of %(directory)s")
File "C:\Python27\lib\site-packages\django\utils\translation\__init__.py", line 75, in gettext_noop
return _trans.gettext_noop(message)
File "C:\Python27\lib\site-packages\django\utils\translation\__init__.py", line 48, in __getattr__
if settings.USE_I18N:
File "C:\Python27\lib\site-packages\django\utils\functional.py", line 184, in inner
self._setup()
File "C:\Python27\lib\site-packages\django\conf\__init__.py", line 40, in _setup
raise ImportError("Settings cannot be imported, because environment variable %s is undefined." %ENVIRONMENT_VARIABLE)
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.
manage.py がその環境変数を設定することになっていることを理解しています。プロジェクトがpythonパスにないため、このエラーが発生する可能性があることも理解しています...しかし、手動で追加する必要はないようです。この問題もmanage.pyで解決できるのではないでしょうか?
編集:Linuxでまったく同じことをテストしたところ、まったく同じことがわかりました。
編集: これは便利な発見です: PIP 経由で Django をインストールした場合にのみこのエラーが発生します。Ubuntu に python-django パッケージをインストールすると正常に動作します。そのため、PIP ではなく、debian パッケージが行っていることがあります。もしかしたら、debian パッケージがいくつかの環境変数を設定しているのではないでしょうか? Windowsで開発しようとしているので、それを理解する必要があります。
編集:問題は見つかったと思いますが、解決策ではありません。Ubuntu マシンで作業しているときに、PIP 経由で Django をインストールすると ( pip install django
)、このプロジェクトは、指定したエラーで機能しません。新しいプロジェクト ( django-admin startproject testproject
) を作成し、それが機能することを試してみるとmanage.py
、作成されたフォルダーと、他のすべてを含む別のフォルダーで構成されます。このような:
+-testproject
+-manage.py
+-testproject
+-__init__.py
+-etc.
Debian パッケージ ( apt-get install python-django
) をインストールすると、作業しようとしているプロジェクトが動作し、テスト プロジェクト ( django-admin startproject testproject
) を作成すると、次のようなフォルダー構造になります。
+-testproject
+-manage.py
+-__init__.py
+-etc.
違いに注意してください。PIP Django パッケージでは、manage.py がアプリである python モジュールの外側に配置されているように見えますが、Debian パッケージでは manage.py がモジュール内に配置されています。これは、2つのパッケージが異なるバージョンのDjangoであり、その間に構造が変更されたためだと思います.2つのパッケージが異なる方法でこれを行うことは意味がありません.
だから私の問題は、私が開発しようとしているプロジェクトが元々 Debian パッケージ化されたバージョンを使用して生成されたものであるのに対し、私の Windows マシンでは pip から Django のバージョンを使用しようとしているということです。
問題は、問題を解決する方法がわからないことです。この 'debian-package version' の manage.py は単にimport settings
を試みますが、settings.py と同じフォルダーにない場合は失敗します。しかし、Django の別の場所では、プロジェクト自体が /settings.py (django-admin の pip バージョンが使用された場合のように) ではなく、/settings.py にあることを期待しているようです ( debian-package バージョンが使用されている場合)。
調べてみると、Ubuntu リポジトリのバージョンは 1.3.1 ですが、PyPI のバージョンは 1.4 です。1.4 のリリース ノートを見てください。
以前のバージョンから「魔法」を取り除く、更新されたデフォルトのプロジェクト レイアウトと manage.py。新しいレイアウトが気に入らない場合は、代わりにカスタム プロジェクトとアプリ テンプレートを使用できます。
しかし... 1.3 レイアウトで生成されたプロジェクトは 1.4 でも動作するはずではありませんか?