Шесть: невозможно импортировать имя 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
пакет.