我今天使用git提取了最新的代码,但出现了以下错误:

ImportError at /
cannot import name Like

这可能与循环导入有关。我检查了回溯:
Traceback:
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/core/handlers/base.py" in get_response
  101.                             request.path_info)
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/core/urlresolvers.py" in resolve
  298.             for pattern in self.url_patterns:
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/core/urlresolvers.py" in url_patterns
  328.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/core/urlresolvers.py" in urlconf_module
  323.             self._urlconf_module = import_module(self.urlconf_name)
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/utils/importlib.py" in import_module
  35.     __import__(name)
File "/Users/Desktop/python/mystuff/Project/Project/urls.py" in <module>
  7. admin.autodiscover()
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/contrib/admin/__init__.py" in autodiscover
  29.             import_module('%s.admin' % app)
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/utils/importlib.py" in import_module
  35.     __import__(name)

它看上去唯一可能引起问题的代码是urls.py。那有下面的代码:
from django.contrib import admin
admin.autodiscover()

因此,大约在这段时间里,我注意到我们先前编写的admin.py文件在最新合并中已删除,但是admin.pyc仍然存在。删除.pyc文件可以解决循环导入错误,现在一切正常。

我的问题是:这里到底发生了什么? Git被配置为忽略所有pyc文件,因此在合并之后,即使删除了.py,.pyc仍然停留在周围。但是,如果.py本身被删除,python是否不应该足够聪明,不要尝试在.pyc中调用任何已编译的代码?

最佳答案

不,事实上,Python会优先使用.pyc文件,并且只有在a)存在且b)比.py文件新的情况下,才访问.pyc文件。

这允许您以编译形式分发Python应用程序而无需源代码(尽管这不是一种代码“混淆”技术)。

关于python - 为什么旧的.pyc文件会破坏Django?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12334869/

10-10 23:50