我今天使用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中的任何编译代码?
答案 0 :(得分:8)
不,实际上,Python最好使用.pyc
文件,只有访问.py
文件(如果a)存在且b)比.pyc
文件更新。
这允许您在没有源代码的情况下以编译形式分发Python应用程序(尽管它不是代码“混淆”技术)。
答案 1 :(得分:4)
不,Python(故意,见下文)对此愚蠢!你可以运行
find . -name '*.pyc' -delete
从项目目录中删除旧的.pyc
文件。
如果你正在使用git,你可以set up a hook在结账时自动执行此操作。这是Mercurial的similar solution。
答案 2 :(得分:2)
你可以做的就是用
启动djangopython -B manage.py runserver
或自动删除pyc,可能使用django-extensions中的clean_pyc
./manage.py clean_pyc