4

所以我在 Ubuntu 上设置了一个 virtualenv,安装了所有东西,并让开发站点运行runserver. 我自己的所有单元测试都通过了,但是许多 Django 包的单元测试没有通过。

所以我试图git bisect弄清楚这一点,检查我最早的提交。我在历史上走得太早了,当开发环境使用不同的数据库引擎、包等时,网站当然无法运行。然后我决定做一些比失败的 Django 单元测试更重要的事情(因为我自己的工作),所以我回到了开发分支中的最新提交。

runserver再次启动,但是这次当我重新加载主页时,我遇到了错误:

Traceback:
File "...venv.../local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  101.                             request.path_info)
File "...venv.../local/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve
  298.             for pattern in self.url_patterns:
File "...venv.../local/lib/python2.7/site-packages/django/core/urlresolvers.py" in url_patterns
  328.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "...venv.../local/lib/python2.7/site-packages/django/core/urlresolvers.py" in urlconf_module
  323.             self._urlconf_module = import_module(self.urlconf_name)
File "...venv.../local/lib/python2.7/site-packages/django/utils/importlib.py" in import_module
  35.     __import__(name)
File "...project dir.../myproject/urls.py" in <module>
  2. import frontpage.views

Exception Type: ImportError at /
Exception Value: No module named views

在我尝试 git bisect 之前,一切都运行良好。但不再是了,至少在我的本地机器上。

所以我四处搜索,并将我ROOT_URLCONF的从更改'myproject.urls'为 just 'urls'。现在我收到此错误消息:

Traceback:
File "...venv.../local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  101.                             request.path_info)
File "...venv.../local/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve
  298.             for pattern in self.url_patterns:
File "...venv.../local/lib/python2.7/site-packages/django/core/urlresolvers.py" in url_patterns
  328.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "...venv.../local/lib/python2.7/site-packages/django/core/urlresolvers.py" in urlconf_module
  323.             self._urlconf_module = import_module(self.urlconf_name)
File "...venv.../local/lib/python2.7/site-packages/django/utils/importlib.py" in import_module
  35.     __import__(name)

Exception Type: ImportError at /
Exception Value: No module named urls

我用谷歌搜索了一些,并认为也许我的 Python 路径不包括我的项目目录......但是不,当我在项目文件中包含 a 时,它完全print sys.path可以settings.py

那么这里有什么问题呢?我正在使用 Django 1.4.3,并使用python manage.py runserver. 我发誓我的网站在几个小时前还在工作,而且我已经完成了git checkout development很多git reset次......我尝试删除 virtualenv,重新创建它,然后重新安装所有 Python 包。我仍然遇到同样的错误。

(另外,我确实激活了 virtualenv,我什至尝试重新启动,以防万一......到目前为止没有运气)

更新

按照 Lennart 的建议,我在导入失败之前启动了调试器,发现它import frontpage有效,但不是import frontpage.views,frontpage.tests或其他任何东西。我__init__.py的目录中也有一个文件frontpage。至此,sys.path包含我的项目文件夹就好了...

我也已经包括frontpage在我INSTALLED_APPS的里面了。

固定的

感谢 Lennart,我检查了该frontpage模块确实被正确导入。显示了正确的.pyc文件,但这让我想知道 pyc 文件是否与我的实际代码不同步。

所以我删除了所有的 pyc 文件,重新启动了服务器,一切又正常了:)

4

1 回答 1

3

有时您会收到 ImportErrors,因为您尝试导入的模块遇到了一些问题。例如,可能frontpage.view正在尝试导入具有 SyntaxError 的模块。弄清楚到底发生了什么的最好方法是import pdb;pdb.set_trace()在失败的导入之前放置一个并尝试s进入导入。

还要确保在导入时frontpage获得预期的模块,特别检查 modules__file__属性,并且它是__init__.pyc你期望的。

于 2013-01-23T06:32:22.183 回答