ImportError at / не удается импортировать Усекатель имен


Итак, я настроил старый проект python, который использует django 1.3 с zc.строительство. При запуске сервера я получаю следующую ошибку:

Вот полный stacktrace:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/

Django Version: 1.3
Python Version: 2.7.6
Installed Applications:
['filebrowser',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.sitemaps',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'south',
 'sugar',
 'registration',
 'webtopay',
 'pagination',
 'rest_framework',
 'rest_framework.authtoken',
 'mptt',
 'feincms',
 'feincms.module.page',
 'esavadai',
 'esavadai.documents',
 'esavadai.users',
 'esavadai.bookmarks',
 'esavadai.services',
 'esavadai.statistics',
 'esavadai.orders',
 'esavadai.emails',
 'debug_toolbar',
 'django_extensions',
 'test_utils']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.middleware.csrf.CsrfResponseMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'pagination.middleware.PaginationMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware')


Traceback:
File "/home/marijus/workspace/esavadai/eggs/Django-1.3-py2.7.egg/django/core/handlers/base.py" in get_response
  89.                     response = middleware_method(request)
File "/home/marijus/workspace/esavadai/eggs/Django-1.3-py2.7.egg/django/utils/importlib.py" in import_module
  35.     __import__(name)
File "/home/marijus/workspace/esavadai/project/esavadai/urls.py" in <module>
  8. admin.autodiscover()
File "/home/marijus/workspace/esavadai/eggs/Django-1.3-py2.7.egg/django/contrib/admin/__init__.py" in autodiscover
  26.             import_module('%s.admin' % app)
File "/home/marijus/workspace/esavadai/eggs/Django-1.3-py2.7.egg/django/utils/importlib.py" in import_module
  35.     __import__(name)
File "/home/marijus/workspace/esavadai/eggs/django_extensions-1.3.9-py2.7.egg/django_extensions/admin/__init__.py" in <module>
  23. from django_extensions.admin.widgets import ForeignKeySearchInput
File "/home/marijus/workspace/esavadai/eggs/django_extensions-1.3.9-py2.7.egg/django_extensions/admin/widgets.py" in <module>
  7. from django.utils.text import Truncator

Exception Type: ImportError at /
Exception Value: cannot import name Truncator

Вот мой файл сборки:

[buildout]
parts =
    apacheconf
    production.py
    my.cnf
    mkdir
    django
#   scribd-patch
    jquery-ui
    tinymce

eggs =
    PIL
    South
    django
    django-annoying
    django-sugar
    python-scribd
    django-mptt
    django-filebrowser-no-grappelli
    django-webtopay
    django-pagination
    django-registration
    feincms
    mock
    simplejson
    djangorestframework
    djangorestframework-csv
    markdown

extra-paths = project


allowed-eggs-from-site-packages =
    PIL
    setuptools
    distribute

extensions = mr.developer
sources = sources
sources-dir = parts
auto-checkout = *

download-cache = cache

versions = versions

servername = www.myproject.com
serveradmin = admin@myproject.com

[sources]
# my.package = svn http://example.com/svn/my.package/trunk
# some.other.package = git git://example.com/git/some.other.package.git
# bzr.package = bzr bzr+ssh://bazaar.launchpad.net/~user/project/branch/
python-scribd = svn http://python-scribd.googlecode.com/svn/trunk
django-annoying = hg https://bitbucket.org/sirex/django-annoying
django-sugar = git git://github.com/montylounge/django-sugar.git
django-filebrowser-no-grappelli = git git://github.com/wardi/django-filebrowser-no-grappelli.git
django-webtopay = git git://github.com/Motiejus/django-webtopay.git

[versions]
South = 0.7.3
django = 1.3
django-mptt = 0.4.2
django-pagination = 1.0.7
django-registration = 0.8
feincms = 1.4.2
mock = 0.8.0
simplejson = 2.2.1
djangorestframework = 2.2.7
markdown = 2.3.1
django-debug-toolbar = 0.9.4

[django]
recipe = djangorecipe
project = project
settings = production
eggs = ${buildout:eggs}
extra-paths = ${buildout:extra-paths}
wsgi = true
wsgilog = ${buildout:directory}/var/log/wsgi.log

[mkdir]
recipe = z3c.recipe.mkdir
paths =
    ${buildout:directory}/var/htdocs/static
    ${buildout:directory}/var/log

[apacheconf]
recipe = collective.recipe.template
input = ${buildout:directory}/etc/apache.conf.in
output = ${buildout:directory}/etc/apache.conf

[production.py]
recipe = collective.recipe.template
input = ${buildout:directory}/etc/production.py.in
output = ${buildout:directory}/etc/production.py

[my.cnf]
recipe = collective.recipe.template
input = ${buildout:directory}/etc/my.cnf.in
output = ${buildout:directory}/etc/my.cnf

[scribd-patch]
recipe = collective.recipe.patch
path = parts/python-scribd/scribd/
patches = patches/scribd-issue-3.diff

[jquery-ui]
recipe = hexagonit.recipe.download
url = http://jquery-ui.googlecode.com/files/jquery-ui-1.8.19.zip
destination = ${buildout:directory}/var/vendor-staticfiles
ignore-existing = true
excludes =
    index.html
    development-bundle/*

[tinymce]
recipe = hexagonit.recipe.download
url = https://github.com/tinymce/tinymce/archive/3.4.4.zip
destination = ${buildout:directory}/var/vendor-staticfiles
ignore-existing = true
excludes =
    tinymce/changelog.txt
    examples/*
strip-top-level-dir = true

Из того, что я вижу класс Truncator в django.utils.текст отсутствует в django 1.3. Если бы мне пришлось угадать какой-то модуль, версия которого не была указана в buildout, использует этот класс, но не сделал этого, когда этот проект был построен на django 1.3.

Я прав ? Будь то или нет-каковы мои варианты здесь ?

1 2

1 ответ:

Класс Truncator был добавлен в Django 1.4. Очевидно, что версия django-extensions, которую вы установили, требует Django 1.4 или более поздней версии; именно этот пакет пытается сделать этот импорт.

Вам придется найти и более старую версию этого пакета, которая будет работать с вашей установкой Django 1.3.

Глядя на репо django-extensions GitHub, вы можете увидеть, что ониудалили совместимость для более старых версий Django в ноябре прошлого года. Пользовательский интерфейс GitHub показывает нам, что самые ранние тег, содержащий этот коммит, равен 1.3, поэтому предыдущая версия все еще должна работать. Эта версия, по-видимому, 2.5, согласно списку тегов GitHub и информации django-extensions PyPI.

Закрепите этот пакет в разделе версий:

[versions]
# ...

django-extensions = 1.2.5