突然出现导入错误


问题内容

因此,我在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之前,一切工作都很好。但是至少在我的本地计算机上不再可用。

所以我用Google搜索周围,并改变了我ROOT_URLCONF'myproject.urls''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路径没有包括我的项目目录…但没有,它完全没有当我包括一个print sys.path在我的settings.py文件的项目!

那么这是什么问题呢?我正在使用Django 1.4.3,并使用启动服务器python manage.py runserver。我发誓,我的网站在几个小时前刚刚工作,而且因为我已经做过git checkout developmentgit reset很多次。我已经试过删除的virtualenv,重新创建,并重新安装所有的Python包。我仍然遇到相同的错误。

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

更新

继伦纳特的建议下,我失败的导入之前开始调试正确,发现import frontpage的作品,而不是import frontpage.viewsfrontpage.tests或其他任何东西。我__init__.pyfrontpage目录中也有一个文件。至此,sys.path包含我的项目文件夹。

我已经包括frontpage在我INSTALLED_APPS为好。

固定

多亏了Lennart,我检查了frontpage模块的输入确实正确。显示了正确的.pyc文件,但这使我想知道pyc文件是否与我的实际代码不同步。

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


问题答案:

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

还要确保在导入时frontpage将模块取回,请特别检查modules__file__属性,并确保它是__init__.pyc您期望的。