2017-04-26 31 views
0

使用Python下安裝six 1.10.0和PIP 2.6,一個老的Django 1.0.4應用程序無法導入python_2_unicode_compatible即使它找到six 1.10.0就好:六:無法導入名稱python_2_unicode_compatible

>>> 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在另一個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最初配置和有完全相同的錯誤。我以爲自己讀了2.7或其他地方的python_2_unicode_compatible被棄用的地方,所以我回到了網站運行的原始版本。


我需要安裝virtualenv嗎?我通常不會在Docker下做這件事,而只是在全球安裝所有東西。我看不出這會如何改變。

如果six沒有找到,我不會得到一個錯誤,它不能導入六,而不是python_2_unicode_compatible

回答

0

python_2_unicode_compatible方法最初是在Django中,然後在1.9中加入six

其中一個安裝的軟件包可能試圖從django.utils.encoding而不是從six軟件包中導入python_2_unicode_compatible

+0

如何在地獄中看到它試圖從'django.utils.encoding'中獲取? :) anyhoot,不兼容?姆。我甚至不確定它是用django_cms開始的。我剛剛在舊文件中找到指向機器上本地安裝的符號鏈接。這是我在備份中發現的唯一版本。 – eduncan911

+0

回溯顯示錯誤在'cms.middleware.user'中,所以我[搜索](https://github.com/divio/django-cms/search?utf8=%E2%9C%93&q=python_2_unicode_compatible&type=) 'python_2_unicode_compatible'的django-cms回購:) – Alasdair

+0

我剛剛瀏覽過這些文件,它們或者不存在,或者與我在本地安裝的'django_cms'完全不同。它看起來像你的搜索是在3.4.x版本 - 這是比我上面列出的版本(2.0.0a0)新8年。 – eduncan911