我刚刚将环境更新为Django 1.4。在syncdb的第一次运行时,我收到以下错误:
TypeError: decode() argument 1 must be string, not None
此错误由django/contrib/auth/management/init
:
try:
return getpass.getuser().decode(locale.getdefaultlocale()[1])
except (ImportError, KeyError, UnicodeDecodeError):
# KeyError will be raised by os.getpwuid() (called by getuser())
# if there is no corresponding entry in the /etc/passwd file
# (a very restricted chroot environment, for example).
# UnicodeDecodeError - preventive treatment for non-latin Windows.
return u''
getdefaultlocale
返回None
在阅读this Django门票后,我尝试了非官方的补丁,但是我认为通过弄清楚发生了什么,我可以做得更好。
所以我打开了一个python命令行,并尝试了:
import os
print os.getenv()
None
os.getenv.__doc__
"Get an environment variable, return None if it doesn't exist.\n The optional second argument can specify an alternate default."
我可以在OSX中解决这个问题吗?欢迎提示
答案 0 :(得分:13)
立即解决此问题,假设您使用bash作为shell:
$ export LC_ALL=en_US.UTF-8
$ export LANG=en_US.UTF-8
这将设置该会话的区域设置,syncdb将起作用。您可以将其添加到您的个人资料中,并使其永久保存在您的个人资料中。
您可以使用locale
命令查看当前设置,并使用locale -a
查看可用的区域设置。 en_US.UTF-8
是一个通用的安全版,但您可能有其他偏好。