2

six 1.10.0Python 和 pip 2.6 下安装后,旧的 Django 1.0.4 应用程序无法导入python_2_unicode_compatible,即使它发现six1.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_wsgigunicorn(已安装 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

4

1 回答 1

3

python_2_unicode_compatible方法最初在 Django 中,然后six在 1.9 中添加。

您已安装的软件包之一可能正在尝试从 导入python_2_unicode_compatibledjango.utils.encoding而不是从six软件包导入。

于 2017-04-26T17:03:30.427 回答