Backporting from 3 to 2.7: ImportError: cannot import name

Backporting from 3 to 2.7: ImportError: cannot import name

读完 this 并哭了很久之后,我正在尝试让我的 Django 应用程序与 Python 2.7 一起工作。

这是我的 Django 网络目录:

├── locale
│   ├── en
│   ├── fr
│   └── sv
├── produits
│   ├── migrations
│   └── templatetags
├── pyweb
├── templates
│   └── produits
├── third_party
│   ├── authomatic_0_1_0
│   ├── defusedxml-0.4.1
│   ├── google_appengine_1_9_25
│   ├── python-openid_2_2_5
│   └── python3-openid
└── uploads

需要注意的最重要的一点是,我已尝试将所有 "external" 模块添加到文件夹 third_party

在我的 views.py 中,以下代码有效:

from third_party.authomatic_0_1_0 import authomatic
from third_party.authomatic_0_1_0.authomatic import adapters
from third_party.authomatic_0_1_0.authomatic.providers import oauth1, oauth2

它正在运行 因为我在 settings.py 的开头添加了那些行

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR+'/third_party/defusedxml-0.4.1')
sys.path.append(BASE_DIR+'/third_party/python3-openid')
sys.path.append(BASE_DIR+'/third_party/google_appengine_1_9_25')
sys.path.append(BASE_DIR+'/third_party/authomatic_0_1_0')

但是现在,在 python 2.7 中它不再起作用了。我应该怎么做才能让它发挥作用? Python 中的最佳做法是什么(因为 Pycharm 无法识别 third_party 的所有子文件夹)?

两个问题:(1)编码,所以我在所有文件的开头都加了:

# coding=UTF-8

(2) 装饰器 python_2_unicode_compatible:我所有实现了 __str__ 的模型都需要这个,例如:

@python_2_unicode_compatible
class Texte(models.Model):
    texte = models.CharField(max_length=200)

    def __str__(self):
        return self.texte

有关详细信息,请参阅 here