我今天使用Git拉最新代碼,我得到了以下錯誤:爲什麼舊的.pyc文件會破壞Django?
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中的任何編譯代碼?
它不知道它被刪除了,如果沒有'py'或者'py'比較老,它實際上總是試圖使用'pyc'。 –
將此添加到您的'root_directory/.gitignore'文件:'* .pyc'。它會告訴git忽略python字節碼。將'pyc'作爲repo的一部分並不是一個好主意,因爲每個本地特性都會對它們進行編輯,如果將它們推送給沒有新模塊的其他用戶,則可能會導致運行時錯誤。 – 2012-09-08 23:13:13