我刚刚使用 Mercurial 将一个 Django 项目克隆到我已经设置 Python 2.7 的 Windows 机器上。当我尝试运行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 包,它工作正常。因此,debian 软件包正在做一些 PIP 没有做的事情。也许debian包设置了一些环境变量?我需要弄清楚这一点,因为我正在尝试在 Windows 上进行开发。
编辑:我想我找到了问题,但不是解决方案。在 Ubuntu 机器上工作,当我通过 PIP ( pip install django
) 安装 Django 时,这个项目无法解决我给出的错误。如果我创建一个新项目 ( django-admin startproject testproject
) 并尝试它可以工作,它包含manage.py
在创建的文件夹中,另一个文件夹包含其他所有内容。像这样:
+-testproject
+-manage.py
+-testproject
+-__init__.py
+-etc.
apt-get install python-django
当我django-admin startproject testproject
安装Debian 软件包(
+-testproject
+-manage.py
+-__init__.py
+-etc.
注意区别:PIP Django 包似乎将 manage.py 放在作为应用程序的 python 模块之外,而 Debian 包将 manage.py 放在模块中。我认为这是由于两个包属于不同版本的 Django,在它们之间改变了结构,因为这两个包以不同的方式执行此操作没有任何意义。
所以我的问题是我正在尝试开发的项目最初是使用 Debian 打包的版本生成的,而在我的 Windows 机器上,我正在尝试使用来自 pip 的 Django 版本。
问题是我不确定如何解决这个问题。天真地将 manage.py 向上移动一个目录,使其位于项目文件夹之上是行不通的,因为这个“debian-package 版本”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 下工作......?