在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 的非常旧的站点移动到新服务器。旧服务器坏了,所以我只有备份很久以前安装的主要网站文件和依赖项。
我正在对它进行 Dockerizing 以帮助记录和在未来部署它。
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
?