OSX上的Python os.getenv(Django 1.4)

时间:2012-03-27 08:52:20

标签: python django linux macos

我刚刚将环境更新为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中解决这个问题吗?欢迎提示

1 个答案:

答案 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是一个通用的安全版,但您可能有其他偏好。