【问题标题】:Got an import error all of a sudden突然出现导入错误
【发布时间】:2013-01-23 03:48:09
【问题描述】:

所以我在 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' 更改为 '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 路径可能不包含我的项目目录...但不,当我在项目的 settings.py 文件中包含 print sys.path 时,它完全可以!

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

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

更新

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

我已经在我的INSTALLED_APPS 中添加了frontpage

已修复

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

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

【问题讨论】:

    标签: python django git virtualenv


    【解决方案1】:

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

    还要确保当您导入 frontpage 时,您得到了您期望的模块,特别检查模块 __file__ 属性,它是您期望的 __init__.pyc

    【讨论】:

    • 我已经更新了我的问题,但不确定接下来要尝试什么。有什么想法吗?
    • 我的网站以前工作过,现在仍在开发服务器上工作,代码完全相同。我也再次检查了文件;未检测到语法错误。
    • 是的!多亏了它,我才修好了。非常非常感谢你! :)
    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2021-01-17
    • 2023-03-27
    • 2021-11-14
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多