python_2_unicode_compatible错误

时间:2013-12-23 10:39:04

标签: python django python-2.7 ubuntu django-models

models.py如下,

from django.contrib.auth.models import User
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.timezone import now

@python_2_unicode_compatible
class Tag(models.Model):
    name = models.CharField(max_length=50, unique=True)

    class Meta:
            verbose_name = 'tag'
            verbose_name_plural = 'tags'
            ordering = ['name']

    def __str__(self):
            return self.name
.............  and so on

当我跑python manage.py syncdb时,这是我得到的错误:

itman@itman:~/djangoApp/mysite$ python manage.py syncdb
Traceback (most recent call last): 
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/lib/python2.7/dist-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python2.7/dist-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python2.7/dist-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/lib/python2.7/dist-packages/django/core/management/base.py", line 231, in execute
    self.validate()
  File "/usr/lib/python2.7/dist-packages/django/core/management/base.py", line 266, in validate
    num_errors = get_validation_errors(s, app)
  File "/usr/lib/python2.7/dist-packages/django/core/management/validation.py", line 30, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/usr/lib/python2.7/dist-packages/django/db/models/loading.py", line 158, in get_app_errors
    self._populate()
  File "/usr/lib/python2.7/dist-packages/django/db/models/loading.py", line 67, in _populate
    self.load_app(app_name)
  File "/usr/lib/python2.7/dist-packages/django/db/models/loading.py", line 88, in load_app
    models = import_module('.models', app_name)
  File "/usr/lib/python2.7/dist-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/home/itman/djangoApp/mysite/bmark/models.py", line 4, in <module>
    from django.utils.encoding import python_2_unicode_compatible
ImportError: cannot import name python_2_unicode_compatible

我不知道为什么没有导入模块。我正在使用Python 2.7和Django 1.4。

11 个答案:

答案 0 :(得分:20)

对于最新的Django 3.0.4和auditlog,请尝试

from six import python_2_unicode_compatible

代替

from django.utils.six import python_2_unicode_compatible

如果未安装,请运行以下代码

pip install six

答案 1 :(得分:7)

仅在Django 1.5版本中添加了

python_2_unicode_compatible功能。

https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.encoding.python_2_unicode_compatible

答案 2 :(得分:4)

当我想使用Django for Graphite时遇到了这个问题。 结果我安装了Django 1.3并且我的Graphite版本打破了Django&gt; 1.5,所以安装最新版本的1.4分支修复了问题:

sudo pip install --upgrade 'Django<1.5'

答案 3 :(得分:3)

自1.4.2以来,它实际上也存在于1.4系列中。您应该使用最新的1.4.X版本(截至撰写本文时为1.4.10),因为早期版本已知安全漏洞。

答案 4 :(得分:2)

from django.utils.six import python_2_unicode_compatible

而不是

from django.utils.encoding import python_2_unicode_compatible

这在Django 1.10.6中对我很有用

答案 5 :(得分:1)

Django 2.x版本升级到3.0 时,我遇到了同样的问题。由于auditlog库,我遇到了这个问题。

首先,执行以下命令

pip uninstall auditlog

然后

pip install auditlog3

答案 6 :(得分:0)

我在使用 Djnago-multiselect 应用程序时遇到了同样的错误 那是因为应用程序试图运行以下导入

from django.utils.encoding import python_2_unicode_compatible

但是在较新版本的 django 中,python_2_unicode_compatible 不在 encodings.py 中,而是在 6 个模块中,如果您没有使用 6 个,则安装

pip install six

然后转到 django.utils.encoding.py 文件 并简单地从六个这样的导入 python_2_unicode_compatible

from six import python_2_unicode_compatible

答案 7 :(得分:0)

有一个支持 Django 3 的现有包: auditlog3

您可以通过 pip install auditlog3

安装它

答案 8 :(得分:0)

我发现了同样的问题:

from django.utils.encoding import python_2_unicode_compatible
ImportError: cannot import name 'python_2_unicode_compatible'

我已将 python 版本更新为 python3.8,并且为我工作。

答案 9 :(得分:0)

我将 Django 1.9 (Python 2.7) 升级到 Django 3.2 (Python 3.9)。

你可以用 bash one liner 来解决这个问题:

grep -ril "from django.utils.encoding import python_2_unicode_compatible"  your_project_source_code | xargs sed -i 's@from django.utils.encoding import python_2_unicode_compatible@from django.utils.six import python_2_unicode_compatible@g'

答案 10 :(得分:0)

我在另一台计算机上使用 Django,但也想用虚拟环境复制项目。它不起作用,所以我不得不重新创建环境。 我收到此错误是因为我错过了许多包裹中的一个:

django-background-tasks

所以我不得不安装这个包,它解决了错误。