六:无法导入名称python_2_unicode_compatible

时间:2017-04-26 16:53:49

标签: python django six

在Python和pip 2.6下安装six 1.10.0,旧的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的旧网站移动到新服务器。旧的服务器嘶哑,所以我所拥有的是很久以前安装的主要网站文件和依赖项的备份。

我将Docker化它以帮助记录并在将来部署它。

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正在另一个带有proxy_pass的Docker容器中运行,并且将是前端代理和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最初配置并具有完全相同的错误。我以为我读过在2.7或者其他东西中不推荐使用python_2_unicode_compatible的地方,所以我回到了网站运行的原始版本。

我需要安装virtualenv吗?我通常不会在Docker下执行此操作,只需在全局安装所有内容即可。我无法看出这会产生什么影响。

如果找不到six,我是否会收到无法导入6而不是python_2_unicode_compatible的错误?

1 个答案:

答案 0 :(得分:0)

python_2_unicode_compatible方法最初位于Django中,然后在1.9中添加到six

您安装的某个软件包可能正在尝试从python_2_unicode_compatible导入django.utils.encoding,而不是从six软件包导入。{/ p>