突然出现导入错误

时间:2013-01-23 03:48:09

标签: python django git virtualenv

所以我在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

我用Google搜索了一些内容,并认为我的Python路径可能不包含我的项目目录......但是,当我在项目的print sys.path文件中包含settings.py时,它就完全可以了!

那么这里的问题是什么?我正在使用Django 1.4.3,并使用python manage.py runserver启动服务器。我发誓我的网站几个小时前就已经开始了,我已经多次完成git checkout developmentgit reset ...我已经尝试删除virtualenv,重新创建它,并重新安装所有的Python包。我仍然遇到同样的错误。

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

更新

根据Lennart的建议,我在失败的导入之前启动了调试器,发现import frontpage有效,但不是import frontpage.viewsfrontpage.tests或其他任何内容。我在__init__.py目录中也有一个frontpage文件。此时,sys.path包含我的项目文件夹...

我已经在frontpage中加入了INSTALLED_APPS

固定

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

所以我删除了所有的pyc文件,重新启动了服务器,一切都运行良好了:)

1 个答案:

答案 0 :(得分:3)

有时您会获得ImportErrors,因为您尝试导入的模块遇到了一些问题。例如,frontpage.view可能正在尝试导入具有SyntaxError的模块。确切地知道发生了什么的最好方法是在导入失败之前放置import pdb;pdb.set_trace()并尝试在导入中s tep。

另外,请确保在导入frontpage时,您需要恢复模块,请特别检查模块__file__属性,并确保它是您期望的__init__.pyc