Шесть: невозможно импортировать имя python_2_unicode_compatible

С six 1.10.0 установленный под Python и pip 2.6, старое приложение Django 1.0.4 не может импортировать python_2_unicode_compatible хотя он находит six 1.10.0 просто отлично:

>>> import six
>>> six.__version__
'1.10.0'
>>> from six import python_2_unicode_compatible
>>> 

Я подтвердил с помощью кода Python в приложении, что оно действительно имеет доступ к six:

['appdirs==1.4.3', 'argparse==1.4.0', 'astkit==0.5.4', 'beautifulsoup==3.2.1',
'coverage==4.3.4', 'django-cms==2.0.0a0', 'django==1.0.4', 'dnspython==1.12.0',
'flup==1.0.2', 'importlib==1.0.4', 'iniparse==0.3.1', 'instrumental==0.5.3',
'mako==1.0.6', 'markupsafe==1.0', 'minimock==1.2.8', 'mysql-python==1.2.5',
'nose==1.3.7', 'packaging==16.8', 'pillow==3.4.2', 'pip==9.0.1', 'pluggy==0.4.0',
'py==1.4.33', 'pyparsing==2.2.0', 'python-dateutil==2.6.0', 'pyzor==1.0.0',
'setuptools==35.0.1', 'six==1.10.0', 'sorl-thumbnail==12.3', 'tox==2.7.0',
'uwsgi==2.0.15','virtualenv==15.1.0', 'wheel==0.29.0']

Мне поручили переместить очень старый сайт, на котором работали django 1.0.4 (вы правильно прочитали 1.0.4) и django_cms 2.0.0 Alpha на новый сервер. Старый сервер прохрипел, так что все, что у меня есть, - это резервное копирование основных файлов сайта и зависимостей, которые были установлены давно.

Я докеризирую это, чтобы помочь документировать и развернуть это в будущем.

Ubuntu 14.04
Python 2.6 (same results with 2.7)
Django 1.0.4 (installed via local zip)
django_cms 2.0.0a0 (installed via local zip)

я пытался Apache mod_wsgi, gunicorn (pip2.6 установлен) и в настоящее время используется uwsgi (предпочтительно pip2.6 установлен) для загрузки приложения.

Nginx работает в другом контейнере Docker с proxy_passи будет ли внешний прокси и TLS.

uwsgi запускает сайт с кастомами wsgi,

После загрузки / страница индекса, у меня было много ошибок импорта. Постепенно я решаю каждую из них (в основном, это связано с Django "MIDDLEWARE_CLASSES", определение которого я пока не нашел).

В настоящее время я застрял на следующей ошибке:

Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/wsgi.py", line 230, in __call__
    self.load_middleware()
  File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 41, in load_middleware
    raise exceptions.ImproperlyConfigured, 'Error importing middleware %s: "%s"' % (mw_module, e)
django.core.exceptions.ImproperlyConfigured: Error importing middleware cms.middleware.user: "cannot import name python_2_unicode_compatible"

uwsgi запускается с указанным python2.6 просто отлично:

web_1    | [uWSGI] getting INI configuration from uwsgi.ini
web_1    | *** Starting uWSGI 2.0.15 (64bit) on [Wed Apr 26 16:27:43 2017] ***
web_1    | Python version: 2.6.9 (default, Oct 22 2014, 19:53:49)  [GCC 4.8.2]
web_1    | Python main interpreter initialized at 0xef1050
web_1    | python threads support enabled

Кроме того, python2.7 был изначально настроен и имел ту же ошибку. Мне показалось, что я прочитал, где python_2_unicode_compatible устарел в 2.7 или что-то в этом роде, поэтому я вернулся к исходной версии, под которой работал сайт.


Нужно ли устанавливать virtualenv? Я обычно не делаю это под Docker, а просто устанавливаю все глобально. Я не могу понять, как это будет иметь значение.

Если six не был найден, я не получил бы ошибку, что он не мог импортировать шесть, вместо python_2_unicode_compatible?

1 ответ

python_2_unicode_compatible Метод изначально был в Django, затем добавлен в six в 1.9.

Возможно, один из ваших установленных пакетов пытается импортировать python_2_unicode_compatible от django.utils.encoding, а не из six пакет.

Другие вопросы по тегам